前提・実現したいこと
YouTubeの動画リンクからサムネイルを取得し、その画像を新しいタブで表示する
発生している問題・エラーメッセージ
プロンプトは生成されるがその先はしーんとして動かない
該当のソースコード
html
1<html> 2<head> 3<title>YouTubeサムネ取得ツール</title> 4<script type="text/javascript"> 5<!-- 6function disp(){ 7 // 入力ダイアログを表示 + 入力内容を mid に代入 8 mid = window.prompt("YouTubeのURLをhttp://から入力してください。", ""); 9 10 // エラーデバッグ用にリンクをコピー 11 bcd = mid 12 13 // 上のあれをURL用に変換 14 mid = mid.slice( 32 ) ; 15 mid = mid.slice( 0, 11 ); 16 url = "https://i.ytimg.com/vi/" + mid + "/hq720.jpg"; 17 18 // URLが正常か確認 19 if(url == "https://i.ytimg.com/vi/" + mid + "/hq720.jpg"){ 20 var img = new Image(); 21 img.src = url; 22 return img.height > 0; // 読み込みに失敗すれば 0 になる。 23 if(existImage(url)){ 24 alert("画像の存在を確認しました。\n画像を表示します。"); 25 window.open(url, '_blank'); 26 }else{ 27 alert("画像の存在が確認できませんでした。\n動画URLをご確認ください。\n何度も発生する場合、構文がバカになっている可能性があります。\n動画URLはこちら→" + bcd); 28 } 29 } else { 30 // 空の場合やキャンセルした場合、システムエラーの場合は警告ダイアログを表示 31 window.alert('キャンセルされました。') 32 } 33} 34--> 35</script> 36</head> 37<body> 38<p><input type="button" value="入力用ダイアログを起動する" onClick="disp()"></p> 39</body> 40</html> 41 42
試したこと
if(url == "https://i.ytimg.com/vi/" + mid + "/hq720.jpg"){
の先をwindow.open(url, '_blank');
にしたら動きます。ただ、画像が存在するかも確認したいのでそれも含めてお願いします。
url = "https://i.ytimg.com/vi/" + mid + "/hq720.jpg";
// URLが正常か確認
if(url == "https://i.ytimg.com/vi/" + mid + "/hq720.jpg"){
こちらのif文は常にtrueになる気がしますが、どういう意図で書かれた処理ですか?
----
return img.height > 0; // 読み込みに失敗すれば 0 になる。
このreturn文はどういう意図で書かれた処理ですか?
----
if(existImage(url)){
existImage() って何ですか?どのように定義されているのかご提示ください。
詳しいことは、分かりませんがYouTubeのスクレイピングは規約で禁止されているようです。
スクレイピングではなく、公式APIではやってみてないのでしょうか?
間違いなくあるとは思うのですが・・・。
> こちらのif文は常にtrueになる気がしますが、どういう意図で書かれた処理ですか?
忘れました。いらないので後で消します。
> このreturn文はどういう意図で書かれた処理ですか?
https://www.ecoop.net/memo/archives/2005-06-29-3.htmlに記載された内容を勘で解釈してぶち込みました。意味はほぼ理解していません。
> existImage() って何ですか?どのように定義されているのかご提示ください。
上と同じようにhttps://www.ecoop.net/memo/archives/2005-06-29-3.htmlに記載された内容を勘で解釈してぶち込みました。意味はほぼ理解していません。
> 詳しいことは、分かりませんがYouTubeのスクレイピングは規約で禁止されているようです。
それってこの項ですかね?
"3. 自動化された手段(ロボット、ボットネット、スクレーパなど)を使用して本サービスにアクセスすること。"
あ~でも...まぁ確かにURLから動画IDを持ってきて画像リンクに飛んでるというのを自動でやってるからこれに当てはまるのか...なるほど。
> スクレイピングではなく、公式APIではやってみてないのでしょうか?間違いなくあるとは思うのですが・・・。
公式APIなんてあるんですね...。調べてみます。