完全にランダムなYouTubeビデオを取得する方法が必要です。制限なし。
YouTube APIを使用するにはどうすればよいですか?
**編集*ここで要求されたOKは、私がこれまでに試したことです。
1-youtube開発サイトでAPIと例を確認しました。 http://www.youtube.com/dev/ 正しいAPIまたはそこでそれを行う方法を見つけることができません。
2-もちろんグーグル検索;)得た http://randomyoutubevideo.net/ しかし、彼らは私とユーチューブの間で使用するためにそれらからのAPIのみを提供します。 <これは私にISこれを実際に行うことが可能であるという希望を与えます。
3-youtubeアプリギャラリーをチェックしました http://youtube-gallery.appspot.com/ 誰かがそれをやっているかどうかを確認しました。そしてどうやって。
私もやるのは、YouTubeのディスカッションページで質問することです。おそらくそこにいる誰かが助けることができます。
これを行う方法はないようですが、探しているものを概算する方法はあります。アイデアについては ここ を参照してください。
これらのページの基本的な考え方は、最新のアップロードフィードを使用するか(何かがいつアップロードされたかを気にしない場合)、すべてのYouTube動画のダンプを取得し、それらからランダムにURLを選択することです。
最初のリンクでyoutubeAPIの人を引用するには:
他の人が言及しているように、私たちはデータダンプなどを利用できるようにします。 YouTubeとのやり取りはすべて、標準APIを介して行う必要があります。
本当にランダムなビデオのサンプルを取得する方法を提案するのに十分な統計の背景があるとは言えません。 11文字のYouTubeビデオIDを生成しようとするのはおそらく間違ったアプローチだと思いますが、存在しないビデオIDが多すぎてぶつかる可能性があり、最善ではないと思います。 APIの使用は、X%の確率でHTTP404応答を返すリクエストを行うことです。
APIを使用して「ランダム」に選択された単語やフレーズを検索し、結果のサンプリングを行うだけで、運が良くなる可能性があります。その場合は、orderby = URLパラメーターに使用する値を検討する必要があります。デフォルトの順序は「関連性」です。これにより、アルゴリズムが検索用語に最も関連性があると判断した結果が上位に表示されます。常に最初のエントリなどを取得すると、結果が歪む可能性があります。また、ビデオの逆年代順のフィードを提供する「公開済み」で注文することもできます。
乾杯、-Jeff Posnick、YouTube APIチームrandomyoutubevideo.netに関して、これはそのサイトの「About」ページが言っていることです:
では、どうすればYouTube動画への真にランダムなリンクを提供できるでしょうか。 YouTubeプログラミングインターフェース(API)は、はるかにランダムなビデオの発見を可能にする追加の機能を提供することがわかりました。いくつかのトリックを使用し、時空の断片を少し操作することで、YouTube動画への真にランダムなリンクを生成するプロセスを作成することができました。
このページのランダムなYouTube機能は、現在データベースのサブセットを使用しています。今後、このデータベースを拡張し、需要に応じて、APIを介して無料で利用できるようにする可能性があります。
これは、APIから動画の大規模なリストを取得し、ランダムに選択するDBを作成していることを意味すると理解しています。
http://www.youtuberandomvideo.com/ の所有者として、ランダムに数文字を生成してからv =を検索すると、。で始まるビデオIDを持つすべてのビデオが返されます。
結果が出たら、ランダムに別のビデオを選択します。
これで、YouTube-APIにアクセスできます。
このステップでは、YouTube-APIを使用してランダムなVideoIdを取得します。次のコードサンプルを使用すると、YouTube-Searchからランダムに50個のAPIを取得できます。それが最大です。それらをDBに保存するか、ランダムIDを直接返すことができます。
注意:ユーザーあたり1秒あたり30,000ユニット、1日あたり1,000,000ユニットの制限があります。
コードサンプル
[C#-例]
using System;
using System.Linq;
using System.Net;
using Newtonsoft.Json;
namespace YouTube
{
class Program
{
private static Random random = new Random();
public static string RandomString(int length)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)]).ToArray());
}
static void Main(string[] args)
{
var count = 50;
var API_KEY = "YOUR KEY";
var q = RandomString(3);
var url = "https://www.googleapis.com/youtube/v3/search?key=" + API_KEY + "&maxResults="+count+"&part=snippet&type=video&q=" +q;
using (WebClient wc = new WebClient())
{
var json = wc.DownloadString(url);
dynamic jsonObject = JsonConvert.DeserializeObject(json);
foreach (var line in jsonObject["items"])
{
Console.WriteLine(line["id"]["videoId"]);
/*store your id*/
}
Console.Read();
}
}
}
}
[PHP-例]
function crawlVideos($count = 50)
{
$q = $this->generateRandomString(3);
$url = "https://www.googleapis.com/youtube/v3/search?key=" . self::API_KEY . "&maxResults=$count&part=snippet&type=video&q=" . $q;
$JSON = file_get_contents($url);
$JSON_Data_search = json_decode($JSON);
foreach ($JSON_Data_search->{"items"} as $result) {
$videoId = ($result->{"id"}->{"videoId"});
/*Insert video to your database*/
}
}
function generateRandomString($length = 10)
{
return substr(str_shuffle(str_repeat($x = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length / strlen($x)))), 1, $length);
}
[Python-例]
import json
import urllib.request
import string
import random
count = 50
API_KEY = 'your_key'
random = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(3))
urlData = "https://www.googleapis.com/youtube/v3/search?key={}&maxResults={}&part=snippet&type=video&q={}".format(API_KEY,count,random)
webURL = urllib.request.urlopen(urlData)
data = webURL.read()
encoding = webURL.info().get_content_charset('utf-8')
results = json.loads(data.decode(encoding))
for data in results['items']:
videoId = (data['id']['videoId'])
print(videoId)
#store your ids
次に、次のようなデータベースからランダムIDを読み取ります。
SELECT 'id'
FROM yttable
WHERE 1 ORDER BY Rand() LIMIT 1
あなたのランダムなビデオは次のとおりです。
https://www.youtube.com/embed/[random ID]
楽しんで!
少し話題から外れていることは知っていますが、次のbashスクリプトを提供できます。 Raspberry Piで使用していますが、非常にうまく機能します。
#!/bin/sh
while [ true ];
do
searchresult=""
while [ -z "$searchresult" ]; do
Rand=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-5};echo)
echo "$Rand"
searchresult=$(googler -C -n 100 --np -x -w https://www.youtube.com "$Rand")
done
urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
url=$(shuf -e -n 1 $urls)
echo "$url"
omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
done
前提条件は、 googler および youtube-dl をインストールしていることです。私の最初のアイデアは、ランダムな11文字の文字列を生成し、それらをYouTubeビデオのベースURLに追加することでした。ただし、可能な順列の数は膨大であり(26大文字+26小文字+10桁+ハイフン+アンダースコア= 64文字、64 ^ 11 = 7.38x10 ^ 19順列)、地球上のすべての人がアップロードすると使い果たされます。 100億本の動画。そのため、完全な11文字の識別子をランダムに生成することは実用的なアプローチではありません。私のスクリプトは、代わりにランダムな5文字の文字列(変数「Rand」)を生成し、それらを検索クエリとしてgooglerに渡します。 GooglerはYouTubeサイトでこれらのランダムな文字列を検索し、ほとんどの場合、結果(変数「searchresult」)を返します。結果がない場合は、成功するまで別のランダムな文字列などで検索が繰り返されます。通常、1〜3回の試行が必要です。さまざまな長さの検索文字列を試してみました-4は一意ではない可能性があり、6は長すぎて結果を取得するのに多くの試行が必要になる可能性があり、スクリプトが10を超える検索要求を短時間で送信するとGoogleは、それ以上の検索を一時的にブロックします。
次のステップでは、スクリプトは検索結果からYouTube動画へのハイパーリンクを抽出し、それらを変数「urls」に配置します。次に、そのうちの1つがランダムに選択されて再生され(変数「url」)、プレーヤー(私の場合はomxplayer)に渡されますが、任意のプレーヤーに置き換えることができます。 Omxplayerは、ハードウェアアクセラレーションを使用し、hdmiを介してテレビに直接出力するため、RaspberryPiでは優れています。 「-ohdmi」を「-olocal」に変更すると、オーディオは3.5mmステレオジャックを介して外部アンプに送信されます。再生中に「q」を押すと、現在のビデオの再生が停止し、次のランダムなビデオが自動的に開始されます。 Ctrl-Cを押してスクリプトを停止するまで、それは永遠に続きます。
追加のヒント
いくつかの変更を加えると、特定のトピックに関するランダムなビデオを取得できます。たとえば、追加の検索用語として「Deep Purple」を入力すると、DeepPurpleのランダムなミュージックビデオが表示されます。
#!/bin/sh
while [ true ];
do
searchresult=""
while [ -z "$searchresult" ]; do
Rand=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-2};echo)
echo "$Rand"
searchresult=$(googler -C -n 10 --np -x -w https://www.youtube.com "$Rand" "Deep Purple")
done
urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
url=$(shuf -e -n 1 $urls)
echo "$url"
omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
done
最後の例では、「ディープパープル」という検索語を含むすべてのYouTube動画の比較的小さなサブセットで、5文字の文字列に一致するものを見つけるのが難しいため、ランダム性係数を2文字の文字列に減らしました。 "。また、ここでは、関連性を保つために、googlerによって返される検索結果の数を10に制限しています。 100を使用すると、DeepPurpleの曲を再生しようとしているアマチュアのビデオのような関連性の低い結果も得られます。
次のスクリプトはランダムに再生されます過去12時間以内にアップロードされた新しい動画のみ:
#!/bin/sh
while [ true ];
do
searchresult=$(googler -C -n 100 --np -t h12 -x -w https://www.youtube.com "")
urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
url=$(shuf -e -n 1 $urls)
echo "$url"
omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
done
さまざまな時間制約を設定できます。詳細については、googlerのドキュメントを参照してください。
ランダムなビデオIDを取得する最良の方法は、独自のデータベースを生成することです。 GoogleのYoutube-APIのVideoSearch-Requestを使用します。 「v = SEARCH_STRING」のような検索クエリを生成し、取得したビデオIDをデータベースに挿入するだけです。検索文字列は、ランダムに生成された文字列である必要があります。結果を何度も繰り返すことなく、リクエストからほとんどの動画を取得するには、文字列の長さを4文字にする必要があることがわかりました。
データベースの準備ができたら、データベースからランダムな行を取得できます。
私は自分でこれを行いました Website(random-video.net) そして数時間で200万以上のエントリを取得しました。実際の制限はありません。データベースのサイズだけです。
ダーティクローラーはオプションですか?単純なランダムなyoutubevidリンクジェネレーターを使用したからです。これは、大量のビデオを蓄積するためだけのものであり、制作用ではありませんでした。
彼が説明した「youtuberandomvideo.com」アプローチに(非常に)似ているようです。
import re, urllib
from random import randint
def random_str(str_size):
res = ""
for i in xrange(str_size):
x = randint(0,25)
c = chr(ord('a')+x)
res += c
return res
def find_watch(text,pos):
start = text.find("watch?v=",pos)
if (start<0):
return None,None
end = text.find(" ",start)
if (end<0):
return None,None
if (end-start > 200): #silly heuristics, probably not a must
return None,None
return text[start:end-1], start
def find_instance_links():
base_url = 'https://www.youtube.com/results?search_query='
url = base_url+random_str(3)
#print url
r = urllib.urlopen(url).read()
links = {}
pos = 0
while True:
link,pos = find_watch(r,pos)
if link == None or pos == None:
break
pos += 1
#print link
if (";" in link):
continue
links[link] = 1
items_list = links.items()
list_size = len(items_list)
selected = randint(list_size/2,list_size-1)
return items_list[selected][0]
for i in xrange(1000):
link = find_instance_links()
print link
ご覧のとおり、これはかなり単純で、おそらく簡単に壊れてしまう可能性がありますが、IIRCは、必要なのは数千のランダムなビデオリンクをすばやく取得でき、コードはほんの数行です...
コードの説明:(ランダム->疑似ランダム...)
1。検索クエリのランダム生成(ここでは3文字の長さ)
2。ビデオリンクの下半分からランダムにいくつかのリンクを選択します(動機はコマーシャルを避けることでした)
注:コードは乱雑です。適切なコード設計やエレガントなpythonコードではなく、テクニックの基本的な例としてのみ機能する必要があります。
AFAIK:v=
を検索しても意味のある効果はありません。 v=LadyGaga
を検索すると、LadyGagaの動画が見つかります。 YouTubeの検索アルゴリズムは、説明やタイトルなどを調べます。動画の説明に別の動画がリンクされている場合(別名、?v=..
)、この検索リクエストが表示される可能性が高くなります。 https://developers.google.com/youtube/v3/docs/search/list も参照してください。
GoogleのYoutubeDataAPIにはまだランダムピックが実装されていません。私がしたことはクエリでした
https://www.googleapis.com/youtube/v3/search?part=id&maxResults=50&type=video&q=QUERYSTRING&key=KEY
、QUERYSTRING
はビデオID構文のランダムな5文字の文字列です。結果セットに1〜50本の動画が含まれ、そのうち少なくとも1つのIDに文字列が含まれている場合、ランダムな動画が見つかりました。この方法は通常1〜5回試行します。
最後のチェックが必要です。例:ランダムな文字列はydoat
でした。上記のURLでこれをクエリすると、IDがVEBt0Hxp5Q8
の動画が1つだけ表示されますが、これは適合しません。ビデオの説明のどこかに文字列が含まれている可能性があります。 https://www.youtube.com/results?q=ydoat
を介してydoat
を検索すると、結果が見つかりません。 v%3Dydoat
(v=ydoat
)を検索すると、同じ結果になります。
編集します。 phpのソース: https://github.com/phil294/-Php-Randomtube-random-YouTube-video-generator-
アントンのように、4つのランダムな文字が最適であることがわかりました。
現時点では、次のURLでランダムなYouTubeビデオを取得できます。
https://www.googleapis.com/youtube/v3/search?part=snippet
そして、複数のパラメータを使用します。あなたはそれを見つけることができます ここ 。ただし、制限があります。1日あたり10000リクエスト。
この ランダムYouTubeビデオ サイトでどのように機能するかを確認できます。
数百または数千の単語を含む単語のリストを取得します。次に、そこからランダムに2つの単語を選択し、クエリとして使用します。これは、ランダム性をある程度制御したい場合にも役立ちます。たとえば、英語の単語のリストやドイツ語の単語のリストを作成できます。または、興味のあるトピックにのみ関連する単語を含む、より小さなキュレーションリストを用意します。