如何使用Jsoup从youtube获取图像?

时间:2016-09-27 14:53:06

标签: java android youtube jsoup metadata

我希望当用户点击“添加视频”按钮图标时,创建一个对话框,在该对话框中可以插入他复制的链接。

之后,按“确定”按钮将加载用户输入的页面(从youtube),然后从中获取视频ID。将存储有关此元素<meta itemprop =" videoId "content =" lWHKaK7Ql3k ">的所有内容。

可以通过JSOUP库来建议搜索ID,但我找到了html的示例。获得ID后,我们会尝试拍照。

请提示,因为可以生成添加了视频的图像并将其添加到列表中,如屏幕截图所示。 enter image description here 我的代码带有对话框:

private void showAddVideoDialog(){
    AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
    builder.setTitle("Add video");
    View viewInflated = LayoutInflater.from(getContext()).inflate(R.layout.view_layout_add_video, (ViewGroup) getView(), false);
    final EditText input = (EditText) viewInflated.findViewById(R.id.edt_videoUrl);
    builder.setView(viewInflated);

    builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            m_Text = input.getText().toString();
            Toast.makeText(getContext(), "ОК", Toast.LENGTH_SHORT).show();
        }
    });
    builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
            Toast.makeText(getContext(), "Отмена", Toast.LENGTH_SHORT).show();
        }
    });
    builder.show();
}

非常感谢非讽刺/非居高临下的回应。

2 个答案:

答案 0 :(得分:4)

  

在以下答案中,我假设用户已将youtube网址(youtubeUrl)复制到您的应用程序输入字段中。

示例代码

String youtubeUrl = ...

// Extract video ID
Document videoPage = Jsoup.connect(youtubeUrl).get();

Element videoIdMeta = videoPage.select("div[itemtype=http://schema.org/VideoObject] meta[itemprop=videoId]").first();
if (videoIdMeta == null) {
    // Unable to determine videoId ...
} else {
    String videoId = videoIdMeta.attr("content");

    // Fetch video image
    String videoImageUrl = String.format("https://i.ytimg.com/vi/%s/hqdefault.jpg", videoId);
    Connection.Response response = Jsoup //
        .connect(videoImageUrl) //
        .ignoreContentType(true) // Needed for fetching image
        .execute();

    // Load image for later use
    Bitmap bmp = BitmapFactory.decodeStream(new ByteArrayInputStream(response.bodyAsBytes()));
}

另见

答案 1 :(得分:1)

使用此网址获取与youtube id相关的图片https://i.ytimg.com/vi/ {ID} /hqdefault.jpg

其中ID是您的youtube id