मेरा सर्वर Android पर वीडियोआईडी की सूची भेजता है। अब, मैं इन वीडियो पर सूची दृश्य में शीर्षक, थंबनेल और टिप्पणियों की संख्या दिखाना चाहता हूं। मैंने https://www.googleapis.com/youtube/v3/videos?part=snippet&id={VIDEO_ID}&key={YOUR_API_KEY} GET अनुरोध का उपयोग करके वेब में ऐसा किया है, लेकिन एंड्रॉइड में ऐसा कैसे करें? क्या YouTube ऑब्जेक्ट को इनिशियलाइज़ करने के लिए कोई YouTube SDK है? मैं YouTube से वीडियोआईडी का उपयोग करके यह जानकारी कैसे प्राप्त करूं?

संपादित करें: मैंने YouTube डेटा API क्लाइंट लाइब्रेरी का उपयोग करके इसे प्राप्त करने का एक तरीका ढूंढ लिया है जावा के लिए लेकिन यह बिना किसी स्पष्टीकरण के रनटाइम त्रुटि दे रहा है।

यहाँ पर मेरे द्वारा उपयोग किया गया कोड है

/**
 * Define a global instance of a Youtube object, which will be used
 * to make YouTube Data API requests.
 */
private static YouTube youtube;

youtube = new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), new HttpRequestInitializer(){
        public void initialize(com.google.api.client.http.HttpRequest request) throws IOException {
        }
    }).setApplicationName("youtube-cmdline-search-sample").build();

// Call the YouTube Data API's videos.list method to retrieve videos.
    VideoListResponse videoListResponse = youtube.videos().
        list("snippet").setId(videoId).execute();

    // Since the API request specified a unique video ID, the API
    // response should return exactly one video. If the response does
    // not contain a video, then the specified video ID was not found.
    List<Video> videoList = videoListResponse.getItems();
    if (videoList.isEmpty()) {
        System.out.println("Can't find a video with ID: " + videoId);
        return;
    }
    Video video = videoList.get(0)
    // Print information from the API response.
}
5
Shubham Jain 28 नवम्बर 2015, 11:59

3 जवाब

सबसे बढ़िया उत्तर

YouTube आपके प्रश्न के लिए प्रासंगिक (कम से कम) दो आधिकारिक लाइब्रेरी प्रदान करता है:

जैसा कि नाम से पहले ही पता चलता है, पहली लाइब्रेरी विशेष रूप से एंड्रॉइड प्लेटफॉर्म के लिए विकसित की गई है। इसका फोकस आपको प्लेयर फ्रेमवर्क प्रदान करके वीडियो प्लेबैक कार्यक्षमता को एक ऐप में शामिल करने में सक्षम है। यदि आपका लक्ष्य उपयोगकर्ताओं को केवल YouTube वीडियो चलाने के लिए सक्षम करना है, तो संभवतः इसे लागू करना सबसे आसान है। ध्यान दें कि इस लाइब्रेरी में डिवाइस पर आधिकारिक YouTube ऐप इंस्टॉल होना आवश्यक है।

दूसरी लाइब्रेरी अधिक सामान्य है (हालाँकि अलग हैं इसे एंड्रॉइड पर उपयोग करने के निर्देश) और YouTube के डेटा API के चारों ओर एक आवरण प्रदान करता है ताकि इसके साथ थोड़ी सी भी आसानी हो। इसलिए, यह आपको मूल रूप से सब कुछ करने की अनुमति देता है जो आप वेब एपीआई के साथ भी कर सकते हैं। जैसे, यह एंड्रॉइड प्लेयर एपीआई की तुलना में एक अलग समस्या को हल करता है और यदि आप अपने स्वयं के यूआई में वीडियो डेटा प्रदर्शित करते हैं, तो आप पूर्ण नियंत्रण चाहते हैं, तो जाने की संभावना अधिक है।

आपका तीसरा विकल्प वही होगा जो आपने अपने वेब-आधारित समाधान के लिए किया था: एपीआई को स्वयं बनाएं, प्रतिक्रिया को पार्स करें और अपने यूआई घटकों के लिए प्रासंगिक डेटा को बांधें। विभिन्न नेटवर्किंग लाइब्रेरी (यानी रेट्रोफिट) इस प्रक्रिया को बहुत सरल कर सकती हैं।

1
MH. 28 नवम्बर 2015, 10:18

मेरी पोस्ट देखें यहां । मैंने अपने प्रोजेक्ट के लिए बस यही तरीका आजमाया है और यह बहुत अच्छी तरह से काम करता है। आपको उपरोक्त कोड या किसी भी Google एपीआई जार आयात की आवश्यकता नहीं है । बस HTTP अनुरोध को अपने HTTP अनुरोध के साथ बदलें।

आउटपुट JSON में वापस आ गया है, जिसके लिए आप शीर्षक, थंबनेल और अन्य विवरणों की आवश्यकता के लिए एक JSON पार्सर जार का उपयोग कर सकते हैं, जैसा कि मैंने अपने उत्तर में वर्णित किया है।

1
Community 23 मई 2017, 10:32

इसे इस्तेमाल करे:

protected void requestYoutubeVideos(String text) {
      try {
          youtube = new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), new HttpRequestInitializer() {
              public void initialize(HttpRequest request) throws IOException {
              }
          }).setApplicationName("My app name").build();

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

          // Set your developer key from the Google Cloud Console for
          // non-authenticated requests. See:
          // https://cloud.google.com/console
          query.setKey(YOUTUBE_API_KEY);
          query.setQ(text);
          query.setMaxResults(NUMBER_OF_VIDEOS_RETURNED);

          // To increase efficiency, only retrieve the fields that the
          // application uses.
          query.setFields("items(id)");
          query.setOrder("viewCount");

          // Restrict the search results to only include videos. See:
          // https://developers.google.com/youtube/v3/docs/search/list#type
          query.setType("video");

          SearchListResponse searchResponse = query.execute();
          List<SearchResult> list = searchResponse.getItems();
          Log.e("Youtube search", "list ===> " + list);

          //Get Info for each video id
          for (SearchResult video: list) {
              youtubeList.add(video);

              YouTube.Videos.List query2 = youtube.videos().list("id,contentDetails,snippet,statistics").setId(video.getId().getVideoId());
              query2.setKey(YOUTUBE_API_KEY);
              query2.setMaxResults((long) 1);
              query2.setFields("items(id,contentDetails,snippet,statistics)");

              VideoListResponse searchResponse2 = query2.execute();
              List<Video> listEachVideo = searchResponse2.getItems();
              Video eachVideo = listEachVideo.get(0);

          }

      } catch (GoogleJsonResponseException e) {
          Log.e("Youtube search", "There was a service error: " + e.getDetails().getCode() + " : "
                  + e.getDetails().getMessage());
      } catch (IOException e) {
          Log.e("Youtube search", "There was an IO error: " + e.getCause() + " : " + e.getMessage());
      } catch (Throwable t) {
          t.printStackTrace();
      }
  }

और इसे दूसरे धागे से कॉल करना न भूलें:

 new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            requestYoutubeVideos("Harry el Sucio Potter");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}).start();
0
jose920405 13 सितंबर 2016, 20:31