• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

News-Feed/Kalender

F

FranktheTank23

Guest
Hey,
bin ziemlich neu in Javascript, hab aber Erfahrung mit Java, C und sonstigem Bumms, nur halt nicht mit Server/Netzwerk. Hab folgendes vor:
Website, welche mir Uhrzeit, Datum, Wetter, Schlagzeilen und meine nächsten Termine anzeigt - sozusagen als "Bildschirmschoner".
Uhrzeit, Datum und Wetter hab ich mit meinem Wissen hinbekommen. Hänge jetzt also grade noch an den letzen beiden.
Kann mir jemand weiterhelfen, wie ich die Schlagzeilen hiervon tagesschau.de - Die Nachrichten der ARD auslesen kann und einbinden kann?
Hab mich mal n bisschen umgeschaut und gelesen, dass das Einbinden von Daten anderer Websites verboten sei.
Bei den Terminen habe ich mir gedacht, ob es nicht möglich ist meine Termine aus meinem Samsung Smartphone-Kalender
anzeigen zu lassen. Ist das überhaupt machbar?
 
Hab mich mal n bisschen umgeschaut und gelesen, dass das Einbinden von Daten anderer Websites verboten sei.
nur wenn es in den AGB des Webseitenbetreibers so steht.

Bei den Terminen habe ich mir gedacht, ob es nicht möglich ist meine Termine aus meinem Samsung Smartphone-Kalender anzeigen zu lassen. Ist das überhaupt machbar?
zumindest muss dein Kalender von außen erreichbar sein. aber direkt mit JS darauf Zugreifen wird eher nix, es sei denn, dein Kalender hat explizite APIs dafür.
 
Lokal bei mir daheim. Der Kalender wird mit Google synchronisiert, wo wir wieder beim Auslesen von Seiten wären. Wenn das mit dem Auslesen nicht funktioniert, kennt dann jemand eine deutsche Nachrichten API?
 
Kann mir jemand weiterhelfen, wie ich die Schlagzeilen hiervon tagesschau.de - Die Nachrichten der ARD auslesen kann und einbinden kann?
was hast du als server? läuft das mit electron? unter nodejs? https://www.npmjs.com/package/feedme

Bei den Terminen habe ich mir gedacht, ob es nicht möglich ist meine Termine aus meinem Samsung Smartphone-Kalender
anzeigen zu lassen. Ist das überhaupt machbar?
ich hab die google-kalender api dazu genutzt, der google-kalender syncronisiert sich auch mit dem samsung kalender wenn du die google kalender anwendung installierst (jedenfalls in eine richtung, von google zu samsung, ob auch in die andere richtung weiss ich nicht)

- - - Aktualisiert - - -

Der Kalender wird mit Google synchronisiert
ahh ok, Google kalender api, musst hier https://console.developers.google.com/apis/ einen account anlegen
 
Wie gesagt, bin in Sachen Server etc. sehr neu. Hab mir das als localhost vorgestellt, also über den Computer.
 
Hab mir das als localhost vorgestellt, also über den Computer.
lokaler server, ja. dafür gibt es z.b. Electron - Build cross platform desktop apps with JavaScript, HTML, and CSS.
electron ist ein konglomerat aus nodejs(js-server), und crome(browser/client) mit ein paar apis. das würde ich jedenfalls empfehlen.
du lädst dir https://nodejs.org/en/download/ runter und dieses grundgerüst von https://github.com/electron/electron-quick-start. dann gehst du in das directory mit dem grundgerüst und mit npm install wird electron und alle weiteren benötigten apis die du in https://github.com/electron/electron-quick-start/blob/master/package.json angegeben hast runtergeladen. mit npm start wird electron gestartet und deine scripts ausgeführt.
 
Google Kalender Api (mit einmaliger autentifizierung für offline/localhost anwendungen)

-----------------------------------------------------------------------------------------------------------------------------
Schritt 1: OAuth-Client-ID erstellen
-----------------------------------------------------------------------------------------------------------------------------
* auf https://console.developers.google.com/ einloggen
* du erstellst ein projekt
* click auf "Calendar API"
* click auf "Aktivieren"
* ganz links auf "Zugangsdaten" gehen
* dort auf "Anmeldedaten erstellen" gehen und "OAuth-Client-ID" auswählen
* "Zustimmungsbildschirm konfigurieren" dort Email und Produktname eintragen(beim Produktname denk dir was aus) => speichern
* Anwendungstyp "Sonstige" wählen => "Erstellen"
* dann taucht unter "OAuth-2.0-Client-IDs" ein Eintrag auf. da drauf klicken.
* "JSON herunterladen" und die Datei speichern
-----------------------------------------------------------------------------------------------------------------------------
Schritt 2: Node.js und Electron installieren
-----------------------------------------------------------------------------------------------------------------------------
* nodejs installieren
* das electron grundgerüst runterladen und in ein verzeichniss entpacken
* die datei package.json öffnen und den eintrag "dependencies" so anpassen
Code:
"dependencies": {
    "electron-prebuilt": "^1.1.2",
    "googleapis": "latest",
    "google-auth-library": "latest"
  }
(das sollte eigentlich reichen, wenn später fehler kommen probier es mit:)
Code:
"dependencies": {
    "electron-prebuilt": "^1.1.2",
    "express": "latest",
    "socket.io": "latest",
    "googleapis": "latest",
    "google-auth-library": "latest",
    "moment": "latest",
    "ical": "latest",
    "rrule": "latest",
    "request": "latest",
    "feedme": "latest",
    "iconv-lite": "latest",
    "valid-url": "latest"
  }
* "npm install" in der shell in dem verzeichniss aufrufen
* in das verzeichniss ein unterverzeichniss "config" anlegen (oder ähnlich)
-----------------------------------------------------------------------------------------------------------------------------
Schritt 3: Auth-Token erzeugen
-----------------------------------------------------------------------------------------------------------------------------
* ins config verzeichniss die folgende datei als "listCalendars.js" und die unter Schritt 1 runtergeladene JSON datei als "client_secret.json" speichern
Code:
var fs = require('fs');
var readline = require('readline');
var google = require('googleapis');
var googleAuth = require('google-auth-library');

// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/calendar-nodejs-quickstart.json
var SCOPES = ['https://www.googleapis.com/auth/calendar'];
var TOKEN_DIR = '';
var TOKEN_PATH = TOKEN_DIR + 'client_secret_authToken.json';

// Load client secrets from a local file.
fs.readFile('client_secret.json', function processClientSecrets(err, content) {
  if (err) {
    console.log('Error loading client secret file: ' + err);
    return;
  }
  // Authorize a client with the loaded credentials, then call the
  // Google Calendar API.
  authorize(JSON.parse(content), listCalendars);
});

/**
 * Create an OAuth2 client with the given credentials, and then execute the
 * given callback function.
 *
 * @param {Object} credentials The authorization client credentials.
 * @param {function} callback The callback to call with the authorized client.
 */
function authorize(credentials, callback) {
  var clientSecret = credentials.installed.client_secret;
  var clientId = credentials.installed.client_id;
  var redirectUrl = credentials.installed.redirect_uris[0];
  var auth = new googleAuth();
  var oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);

  // Check if we have previously stored a token.
  fs.readFile(TOKEN_PATH, function(err, token) {
    if (err) {
      getNewToken(oauth2Client, callback);
    } else {
      oauth2Client.credentials = JSON.parse(token);
      callback(oauth2Client);
    }
  });
}

/**
 * Get and store new token after prompting for user authorization, and then
 * execute the given callback with the authorized OAuth2 client.
 *
 * @param {google.auth.OAuth2} oauth2Client The OAuth2 client to get token for.
 * @param {getEventsCallback} callback The callback to call with the authorized
 *     client.
 */
function getNewToken(oauth2Client, callback) {
  var authUrl = oauth2Client.generateAuthUrl({
    access_type: 'offline',
    scope: SCOPES
  });
  console.log('Authorize this app by visiting this url: ', authUrl);
  var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });
  rl.question('Enter the code from that page here: ', function(code) {
    rl.close();
    oauth2Client.getToken(code, function(err, token) {
      if (err) {
        console.log('Error while trying to retrieve access token', err);
        return;
      }
      oauth2Client.credentials = token;
      storeToken(token);
      callback(oauth2Client);
    });
  });
}

/**
 * Store token to disk be used in later program executions.
 *
 * @param {Object} token The token to store to disk.
 */
function storeToken(token) {
  try {
    fs.mkdirSync(TOKEN_DIR);
  } catch (err) {
    if (err.code != 'EEXIST' && err.code != 'ENOENT') {
      console.log(err.code);
      throw err;
    }
  }
  fs.writeFile(TOKEN_PATH, JSON.stringify(token));
  console.log('Token stored to ' + TOKEN_PATH);
}

var listCalendars = function(auth)
{
  var api = google.calendar('v3');
  api.calendarList.list({
    auth: auth
  }, function(err, response)
  {
    if (err)
    {
      console.log('The API returned an error: ' + err);
    }
    else
    {
      var calendars = response.items;
      if (calendars.length > 0)
      {
        calendars.forEach(function(calendar)
        {
          listUpcomingEvents(calendar.id, auth)
        });
      }
    }
  });
}

function listUpcomingEvents(id, auth)
{
  var api = google.calendar('v3');
  api.events.list({
    auth: auth,
    calendarId: encodeURIComponent(id)
  }, function(err, response)
  {
    console.log("==>", id);
    if (err)
    {
      console.log(err, id);
    }
    else
    {
      if (!response.items || response.items.length == 0)
      {
        console.log('No upcoming events found.');
      }
      else
      {
        for (var e in response.items)
        {
          console.log("---------------------------");
          console.log(response.items[e]);
        }
      }
    }
  });
}
* "node listCalendars.js" in dem verzeichniss in der shell eingeben
* der zeigt dir eine URL, diese im browser eingeben
* dort bestätigen, daß Google dieser anwendung mit der in schritt 1 erzeugten OAuth-Client-ID zugriff auf deine kalenderdaten geben soll
* dir wird ein Auth-Token angezeigt, das kopieren und in die shell einfügen
* listCalendars.js erzeugt dann im config verzeichniss eine Datei client_secret_authToken.json und zeigt alle deine kalenderdaten an
* ab jetzt kannst du node listCalendars.js aufrufen und bist autentifiziert
-----------------------------------------------------------------------------------------------------------------------------
Schritt 4: kalenderdaten
-----------------------------------------------------------------------------------------------------------------------------
* mit dem gerüst aus listCalendars.js und den beiden dateien client_secret.json und client_secret_authToken.json kannst du deine kalenderdaten auslesen
* listCalendars.js zeigt die kalender-id hinter "==>" an dann folgen die kalendereinträge zu diesem kalender
 
Danke soweit, damit kann ich arbeiten. Melde mich wenn es Neuigkeiten gibt :D
 
Zurück
Oben