Mit Python3 die YouTube API v3 nutzen [Debian8]

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Spohky
User
Beiträge: 21
Registriert: Montag 17. April 2017, 10:52

Hallo zusammen,
ich bin neu hier und wünsche euch erst mal schöne Ostern. :D

Ich möchte gerne auf meinen vServer ein Python-Script laufen lassen, welches z.B. neue YouTube Videos von Kanal XYZ ausliest um diese dann vollautomatisch auf Facebook und Twitter posten zu lassen.

Bisher hat das ganze über PHP Funktioniert, da ich aber meinen bisherigen WebServer auf dem leider kein Python lief, alles auf Python umstellen was das Daten auslesen über die API angeht, wie auch das Posten. (Twitter + Facebook, das wird dann aber eine andere Baustelle....)

Bisher habe ich die PHP YT API v3 genutzt, hat alles super funktioniert, ich musste die API auf dem Server ablegen und 2 Files in einer Funktion einbauen, dann konnte ich mir meine auslese Funktionen zusammenstellen.

Für Python habe ich die Lib schon installiert die benötigt wird, nun verstehe ich das ganze aber leider nicht, da die Beispiele alle auf das einfügen und Co. beziehen, ich will aber nur auslesen, dafür brauche ich dann einen Key für die Berechtigung, den habe ich.

Da Python neu für mich ist und mir ein wenig der Durchblick fehlt, evtl hat von euch jemand Erfahrungen oder kann mir hier weiterhelfen.

Ich bedanke mich mal im voraus für eure Hilfe und Unterstützung. =)


Viele Grüße
Spohky
dn1s
User
Beiträge: 2
Registriert: Dienstag 11. Oktober 2016, 09:10

Hi,

schau dir mal requests an.
Mit requests kannst du einen GET request mit Header informationen wie z.B. deinem Api Key bauen.

Mfg,

Dominik
BlackJack

@dn1s: `requests` ist an sich eine gute Bibliothek für HTTP, aber Google bietet ja bereits selbst Bibliotheken um auf seine APIs zuzugreifen, so dass man sich weniger selbst bauen muss.

@Spohky: Die API auf Serverseite ist ja grundsätzlich die gleiche, also was ist den jetzt das *konkrete* Problem? Du musst doch zum Auslesen nur die gleichen YouTube-API-Funktionen verwenden wie unter PHP auch. Mit welchem API-Endpunkt hast Du denn in PHP die Videos eines Kanals abgefragt? Kurzer Blick in die Referenzdokumentation lässt vermuten, das man eine Suche mit den entsprechenden Parametern absetzen muss.
dn1s
User
Beiträge: 2
Registriert: Dienstag 11. Oktober 2016, 09:10

@BlackJack: Stimmt ganz vergessen das Youtube ja google gehört. ^^
Spohky
User
Beiträge: 21
Registriert: Montag 17. April 2017, 10:52

@BlackJack: Also bei PHP sieht das bei mir etwa so aus:

Funktion zum Laden der API:

Code: Alles auswählen

public function load_yt_api($developerkey)
{
    require_once 'includes/addon/sdk/youtube/src/Google/Client.php';
    require_once 'includes/addon/sdk/youtube/src/Google/Service/YouTube.php';

    $client = new Google_Client();
    $client->setDeveloperKey($developerkey);

    $this->youtube = new Google_Service_YouTube($client);
}
Hier lade ich einfach die API Für YouTube die benötigt wird.
Dann kann ich alles über die Variable youtube durchführen.

Nun kann ich über diese Funktion anfragen ob in einem gewissen Zeitraum Videos gepostet wurden:

Code: Alles auswählen

$data = $this->youtube->activities->listActivities(
    "snippet,contentDetails",
    array(
        "channelId" => $row['id'],
        "maxResults" => 50,
        "publishedAfter" => $this->timestamp->datetime_to_youtube($publishedAfter),
        "publishedBefore" => $this->timestamp->datetime_to_youtube($publishedBefore),
        "pageToken" => $row['page_token']
    )
);
Im Prinzip kann ich mein Skript fast 1 zu 1 übernehmen.

Was ich bisher gemacht habe auf den vServer:
Installation der Lib, manuelle Installation => https://developers.google.com/api-clien ... stallation

Und nun inde ich immer nur Beispiele für "OAuth", damit kann ich lesen und schreiben auf meinemm Youtube Kanal, jedoch habe ich auch ein paar Leute die den Social-Poster nutzen möchten, somit müsste das über den "Dev-Key" laufen mit dem man nur Lesen kann, auf allen Kanälen.

Es muss doch irgendwie die Möglichkeit geben, es so "einfach" wie bei PHP zu machen?
Ich sehe den Wald vor lauter Bäumen nicht... =(

Ich gehe davon aus, ich muss die API laden, dann kann ich der API den Key mitteilen und dann nur noch Funktionen um Channels / Videos usw. abfragen zu können, oder liege ich da falsch?
Zuletzt geändert von Anonymous am Mittwoch 19. April 2017, 15:49, insgesamt 1-mal geändert.
Grund: Quelltext in Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Spohky: diese Beispiele hast Du nicht gefunden???
Spohky
User
Beiträge: 21
Registriert: Montag 17. April 2017, 10:52

@Sirius3: Doch, jedoch habe ich da nicht wirklich das gefunden was ich brauche.
Ich möchte von User X folgende Dinge auslesen:
- Streaming aktiv
- Playlist
- Kanal
- Aktivitäten
- Videos
BlackJack

@Spohky: Dann schau in der Dokumentation zur YouTube-API nach. Da sind die einzelnen Endpunkte von der API, die Du ja auch in PHP benutzt und fast immer sind Beispiele in verschiedenen Programmiersprachen dabei. Da kannst Du dann in der Regel zwischen dem PHP- und dem Python-Beispiel hin und her wechseln und Dir anschauen wie das jeweils aussieht.
Spohky
User
Beiträge: 21
Registriert: Montag 17. April 2017, 10:52

@BlackJack: Vielen Dank, nun geht es!! =)

Mein Problem ist gelöst, wie kann ich nun hier zu machen?

Viele Grüße und Danke
Spohky



Für die, die wissen wollen wie es geht, hier ne kurze Info:

Code: Alles auswählen

#!/usr/bin/python

from apiclient.discovery import build
from apiclient.errors import HttpError
from oauth2client.tools import argparser

DEVELOPER_KEY = "REPLACE"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"

service = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY)

def channels_list_by_id(service, part, id):
  results = service.channels().list(
    id=id,
    part=part
  ).execute()

  print(results)


channels_list_by_id(service, "snippet,contentDetails,statistics", "Channel-ID")
Für die diversen Abfragen, gibt es hier Beispiele: https://developers.google.com/youtube/v ... e_snippets
Zuletzt geändert von Anonymous am Mittwoch 19. April 2017, 21:15, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Spohky
User
Beiträge: 21
Registriert: Montag 17. April 2017, 10:52

Sorry für den Doppelpost!

Noch ne Frage zu Python im Bezug auf mein Vorhaben.

Kann ich z.B. eine Python File machen die alles macht und diese dann in Dauerschleife laufen lassen?
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Nein, alles geht nicht.
Und eine Dauerschleife erreicht man am einfachsten mit der HiFi Funktion Autoreverse.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Spohky
User
Beiträge: 21
Registriert: Montag 17. April 2017, 10:52

@darktrym: Okey, also am besten dann immer nur in einem Script die Kanäle aktualisieren, in nem anderen, dann die Videos usw.
Wenn ich so was z.B. permanent durchlaufen lasse, belastet das dann nicht die MySQLDB zu sehr?
BlackJack

@Spohky: Ich denke Du hast die Ironie überlesen. Es gibt kein ”Python File” das *alles* macht. Ein Programm, egal in welcher Programmiersprache geschrieben, das *alles* macht, würde wahrscheinlich auch sehr gross sein. Unendlich gross. ;-)
Spohky
User
Beiträge: 21
Registriert: Montag 17. April 2017, 10:52

Das Passiert wenn der eine von Bananen redet und der andere von Äpfeln. ^^

Ich muss sagen, Python ist gar nicht so schwer, nur etwas ungewohnt wenn man Jahrelang mit PHP gearbeitet hat. =)
Antworten