4

こんにちは、Android アプリケーションを開発しています。私のアプリケーションの一部は、曲のタイトルを YouTube に解析し、ビデオ リンクを取得したいと考えています。100% 正しいビデオを取得することは重要ではありません。YouTubeからデータを取得するにはどうすればよいですか?

誰かが解決策を見つけるのを手伝ってくれますか?

ありがとう

4

3 に答える 3

3

これを行う最も一般的な方法は、YouTube データ API を使用することです。この API は、動画の URL などを取得するために解析できる XML/Json を返します。

更新 (2017/01/24) (v3)

検索クエリを使用して YouTube 動画を検索するには、次の呼び出しを使用します。

https://www.googleapis.com/youtube/v3/search?part=snippet&q=fun%20video&key=YOUR-API-KEY

検索用に次の基本パラメータがサポートされています。

  • part : 検索で取得したい動画データ。基本的な検索の場合、推奨値はsnippetです。
  • q : 検索したいテキスト
  • key : Google Developer API キー。このキーは、アプリケーションの資格情報ページのGoogle Developer API コンソールで取得できます。キーが属するアプリケーションで Youtube Data API v3 を有効にしてください。

その他のパラメータについては、Google API ドキュメントを参照してください

Java ライブラリの使用

Android では、プラットフォームで利用可能な標準の HTTP リクエスト クラスを使用して URL への HTTP リクエストを実行するか、以下に示すようにGoogle API Java ライブラリを使用できます。

        YouTube youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, new HttpRequestInitializer() {
            public void initialize(HttpRequest request) throws IOException {
            }
        }).setApplicationName("YOUR-APPLICATION-NAME").build();

        String queryTerm = "A fun video"

        // Define the API request for retrieving search results.
        YouTube.Search.List search = youtube.search().list("id,snippet");

        search.setKey("Your-Api-Key");
        search.setQ(queryTerm);

        // Call the API and print first result.
        SearchListResponse searchResponse = search.execute();
        if(searchResponse.getItems().size() == 0)
        { 
           //No items found.
           return;
        }
        SearchResult firstItem = searchResponse.getItems().get(0);

        ResourceId rId = firstItem.getId();
        // Confirm that the result represents a video. Otherwise, the
        // item will not contain a video ID.
        if (rId.getKind().equals("youtube#video")) {
            Thumbnail thumbnail = firstItem.getSnippet().getThumbnails().getDefault();

            Log.d("YOUTUBE_SAMPLE","Video Id" + rId.getVideoId());
            Log.d("YOUTUBE_SAMPLE","Title: " + firstItem.getSnippet().getTitle());
            Log.d("YOUTUBE_SAMPLE","Thumbnail: " + thumbnail.getUrl());
        }
于 2012-08-28T10:36:59.277 に答える
1

こんにちは私が休耕したい方法を私に指摘してくれた皆さんに感謝します。私はついに何かを思いついたし、また私の有効期限を共有したい

YouTubeによると、データをxmlまたはjsonとしてリクエストできます。実装にjsonメソッドを使用しました

http://gdata.youtube.com/feeds/api/videos?q=title_you_want_to_search&max-results=1&v=2&alt=jsonc

あなたはyoutube開発者ガイドからより多くの情報を得ることができます

上記のリクエスト「title_you_want_to_search」は検索したいキーワードです。追加のパラメーターをURLに渡すことで、結果をカスタマイズできます。

  • 「max-results」:取得したい結果の数を指定します(私の場合は1つだけにします)
  • "alt":結果が必要な形式Jsonまたはxml

まず、Youtube apiにデータをリクエストする必要があります。次に、情報のどの部分を配列から選択するかを選択する必要があります。私の場合、「データ」と「アイテム」を使用してビデオIDを取得しました。videoIdを追加した後、次のようにビデオURLを作成できます。

String mVideoLink = "https://youtu.be/"+videoID; (私はこれを行うために次の関数を使用しました)

public String readYoutubeFeed(String songTitle) {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
String url = "http://gdata.youtube.com/feeds/api/videos?q="+songTitle+"&max-results=1&v=2&alt=jsonc";
try {
    URLEncoder.encode(url, "UTF-8");
} catch (UnsupportedEncodingException e1) {
    e1.printStackTrace();
    Log.v(TAG,"encode error");
  }
 HttpGet httpGet = new HttpGet(url);        
    try {
      HttpResponse response = client.execute(httpGet);
      StatusLine statusLine = response.getStatusLine();
      int statusCode = statusLine.getStatusCode();
      if (statusCode == 200) {
         HttpEntity entity = response.getEntity();
         InputStream content = entity.getContent();
         BufferedReader reader = new BufferedReader(new InputStreamReader(content, "UTF-8"));
        String line;
        while ((line = reader.readLine()) != null) {
          builder.append(line);
        }
      } else {
        Log.v(TAG,"Failed to download file");
      }
    } catch (ClientProtocolException e) {
      e.printStackTrace();
      Log.v(TAG,"readYoutubeFeed exeption1");
    } catch (IOException e) {
      e.printStackTrace();
      Log.v(TAG,"readYoutubeFeed exeption2");
    }
    return builder.toString();
  }

public String getYouTubeVideoId(String songTitle){
String jesonData = readYoutubeFeed(songTitle);
Log.i(TAG,jesonData);
String title = "123";        
try {       
    SONObject jObj = new JSONObject(jesonData); 
    JSONArray ja = jObj.getJSONObject("data").getJSONArray("items");
    JSONObject jo = (JSONObject) ja.get(0);
    title = jo.getString("id");              
    Log.v(TAG,"id is " +title);

} catch (Exception e) {
    e.printStackTrace();
    Log.v(TAG,"error occerd");
  }
return title;

}

この文字列を「UTF-8」に変換する際に言及したい重要なことの1つは、JsonArrayの作成で例外がスローされる可能性があるためです。これを行うためのより良い方法があるかもしれません。何か提案があれば

于 2012-08-30T06:23:52.180 に答える
1

公式の Youtube API を探す必要があります。

https://developers.google.com/youtube/code?hl=fr#Java

解析する必要がある Json を返します。

于 2012-08-28T10:34:42.223 に答える