2017-02-11 5 views
0

Diese Frage ist kein Duplikat. Mein Problem ist nicht das Anzeigen falscher Daten, wie es bei dem markierten Artikel der Fall ist, sondern als ein aufmerksamer Benutzer: "Das konkrete Problem in Ihrer Frage ist, dass Sie eine URL verwenden, die nur das eigentliche Video abruft, nicht die Seite mit der Video."Videotitel kann nicht vom YouTube-Videoobjekt abgerufen werden

Ich müsste den Titel eines YouTube-Videos für einen Magento-Webshop bekommen. Mein Code ist nach dem jetzt:

$videocode = $_helper->productAttribute($_product, $_data['value'], $_data['code']); 
$url = "http://www.youtube.com/v/".$videocode."?hl=en_US&version=3"; 
echo $url; 
$videoTitle = file_get_contents($url); 
try { 
    if ($videoTitle) { 
     preg_match("/<title>(.+?)<\/title>/is", $videoTitle, $titleOfVideo); 
     echo $titleOfVideo[1]; 
    } else { 
     return false; 
    } 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 

Die echo $url; gibt die richtige Video-URL.

Aber danach, wenn ich versuche, die $ videoTitle var_dump, gibt es so etwas wie CWS[%xڍZ[{�Fzƀ�@�:Ҷ��v"�uh �H�(E�9����ή� $1=�馧m�=nϽko�z������$��M��_l�oR�lﳶ�����~�� �C)��4��4ʤ[SI�nM�"�.��b�yB��ᵵ��5�u�8�\�, ich meine eine Reihe von ihnen. Aber es gibt nicht falsch zurück.

Für die $ titleOfVideo gibt array(0) { } zurück. Sonst, wenn ich nicht versuche, irgendetwas zu echo oder var_dump, gibt es nichts für mich zurück. Was fehlt mir hier?


Nach gerichtet ist und einige der Forschung zu machen, sieht mein Code wie folgt vor:

$videocode = $_helper->productAttribute($_product, $_data['value'], $_data['code']); 
$videocode = explode('&feature=youtu.be', $videocode); 
$url = "https://www.googleapis.com/youtube/v3/videos?part=snippet&id‌​=".$videocode[0]."&key=".$apikey; 
echo $url; 
$json = file_get_contents($url); 
var_dump($json); //bool(false) 
$json_data = json_decode($json, true); 
if ($json_data) { 
    print_r($json_data); 
} else { 
    return false; 
} 

Die Video-ID korrekt ist. Aber meine $json Rückkehr false. Was vermisse ich noch?

+0

Mögliches Duplikat von [YouTube-Videobeschreibung abrufen und anzeigen, Titel anhand seiner ID mithilfe der YouTube-API] (http://stackoverflow.com/questions/34022332/retrieve-and-display-youtube-video-description-title-by -its-id-using-youtube-ap) – NineBerry

+1

Verwenden Sie die offizielle API, anstatt zu versuchen, Metadaten von der Live-Site zu lesen. Das konkrete Problem in Ihrer Frage ist, dass Sie eine URL verwenden, die nur das tatsächliche Video abruft, nicht die Seite, die das Video enthält. – NineBerry

+0

@NineBerry, nachdem ich ein wenig nach dem Weg der YouTube API gearbeitet habe, kam ich zu dem Schluss, dass, wenn der '$ videocode' das einzige Detail ist, das ich in Bezug auf das Video habe, reicht es nicht aus, die gewünschte Aktion auszuführen. Habe ich recht? – sklrboy

Antwort

1

Verwenden Sie die Google API, um auf Metadaten von Youtube-Videos zuzugreifen.

Zuerst müssen Sie sich bei Google registrieren, um einen API-Schlüssel zu erhalten. Folgen Sie these instructions, um dies zu tun.

Dann können Sie eine URL konstruieren, um die Titel wie folgt abzurufen:

https://www.googleapis.com/youtube/v3/videos?part=snippet&id=dRvS-tLCi5Y&key=YourAPIKey 

Ihr API-Schlüssel an Ort und Stelle verwenden.

Dies wird die folgende JSON zurück:

{ 
"kind": "youtube#videoListResponse", 
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/nmxGC9Qyfl2o0ayvTd9DwRpHySo\"", 
"pageInfo": { 
    "totalResults": 1, 
    "resultsPerPage": 1 
}, 
"items": [ 
    { 
    "kind": "youtube#video", 
    "etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/WzAkhb8NRCtBYcATr8BHzcJJ8sE\"", 
    "id": "dRvS-tLCi5Y", 
    "snippet": { 
    "publishedAt": "2015-11-17T20:49:02.000Z", 
    "channelId": "UCuTn1q6pg2kKRLAQIWSEO5g", 
    "title": "Womanizer - W500 Pro Klitoris Stimulator NYHED", 
    "description": "Womanizers unikke teknologi stimulerer din klitoris på en helt unik måde. Teknologien blander en sugende og pustende fornemmelse på klitoris og evt brystvorter, der sørger for \"orgasme garanti\". Stimulatoren har 8 unikke indstilinger, der giver dig en fantastisk oplevelse. Stimulatoren er formet, så den ligger godt i hånden. Mundstykket kan udskiftes og rengøres. Genopladelig med medfølgende USB kabel.\n\nGod fornøjelse :)\n\nKøb i dag hos: http://www.winkwink.dk/womanizer-w500-pro-klitoris-stimulator-nyhed.html", 
    "thumbnails": { 
    "default": { 
     "url": "https://i.ytimg.com/vi/dRvS-tLCi5Y/default.jpg", 
     "width": 120, 
     "height": 90 
    }, 
    "medium": { 
     "url": "https://i.ytimg.com/vi/dRvS-tLCi5Y/mqdefault.jpg", 
     "width": 320, 
     "height": 180 
    }, 
    "high": { 
     "url": "https://i.ytimg.com/vi/dRvS-tLCi5Y/hqdefault.jpg", 
     "width": 480, 
     "height": 360 
    }, 
    "standard": { 
     "url": "https://i.ytimg.com/vi/dRvS-tLCi5Y/sddefault.jpg", 
     "width": 640, 
     "height": 480 
    }, 
    "maxres": { 
     "url": "https://i.ytimg.com/vi/dRvS-tLCi5Y/maxresdefault.jpg", 
     "width": 1280, 
     "height": 720 
    } 
    }, 
    "channelTitle": "Winkwink.dk", 
    "tags": [ 
    "#sexlegetøj", 
    "#winkwinkdk", 
    "#sex", 
    "#winkwink", 
    "#womanizer", 
    "#julegave", 
    "#lovewinkwinkdk", 
    "#stimulator", 
    "#klitoris", 
    "Clitoris (Anatomical Structure)" 
    ], 
    "categoryId": "22", 
    "liveBroadcastContent": "none", 
    "localized": { 
    "title": "Womanizer - W500 Pro Klitoris Stimulator NYHED", 
    "description": "Womanizers unikke teknologi stimulerer din klitoris på en helt unik måde. Teknologien blander en sugende og pustende fornemmelse på klitoris og evt brystvorter, der sørger for \"orgasme garanti\". Stimulatoren har 8 unikke indstilinger, der giver dig en fantastisk oplevelse. Stimulatoren er formet, så den ligger godt i hånden. Mundstykket kan udskiftes og rengøres. Genopladelig med medfølgende USB kabel.\n\nGod fornøjelse :)\n\nKøb i dag hos: http://www.winkwink.dk/womanizer-w500-pro-klitoris-stimulator-nyhed.html" 
    }, 
    "defaultAudioLanguage": "da" 
    } 
    } 
] 
} 

Anschließend können Sie den Titel wie folgt lauten:

$json_data = json_decode($JSON, true); 
$title = $json_data['items'][0]['snippet']['title']; 

Beachten Sie, dass die Youtube-API wird bevorzugt, weil jeder Versuch, zu verwenden, Die Live-Site, um Metadaten von Videos zu lesen, führt dazu, dass youtube diese Anfragen identifiziert und Anrufe blockiert (zeigt ein Captcha anstelle des echten Videocodes)

+0

Es ist interessant. Es druckt die URL korrekt, aber nach dem Kopieren der beiden URLs, um zu vergleichen, hat meins, das vom Skript zurückgegeben wird, eine zusätzliche "% E2% 80% 8C% E2% 80% 8B" vor der nach der '& id' und vorher die eigentliche ID ... – sklrboy

+0

Wie gesagt, das liegt daran, dass du es hier aus dem Kommentar kopiert hast. Die Sonderzeichen werden dort eingefügt, wo es einen Zeilenumbruch in einem Kommentar zu Stack Overflow gibt. – NineBerry

+0

Nein, es stammt von der Seite selbst und wird von 'echo $ url;' zurückgegeben. Vielleicht ist der '$ videocode [0]' hier nicht die beste Lösung ... – sklrboy

Verwandte Themen