java - 如何使用 Twitter4J 检索推文中的图像?

标签 java twitter twitter4j

我想发出关键字或主题标签的查询,并从包含该关键字的所有推文中检索所有图像。我可以使用 Twitter4J使用 Java 轻松发出查询并检索生成的推文。我知道我可以在浏览器中访问 http://t.co/xxxx 链接并查看相关图像。该图片位于 https://pbs.twimg.com/xxxxx。看来我所要做的就是在我的代码中执行该过程!

我可以很容易地解析每条推文中的 http://t.co/xxxx 链接。但是,当我从该链接检索所有 html 时,我没有看到任何 https://pbs.twimg.com/xxxx 图像 :(。我认为正在发生的事情是 twitter 正在加载这些图像通过 JavaScript。

有什么方法可以轻松检索每条推文中的图片??

这是我目前所拥有的:

package com.company;

import twitter4j.*;
import twitter4j.conf.ConfigurationBuilder;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) throws Exception {
        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true)
                .setOAuthConsumerKey("xxxxxxxxxx")
                .setOAuthConsumerSecret("xxxxxxxxxxxx")
                .setOAuthAccessToken("xxxxxxxxx-xxx-xxxxxxxx")
                .setOAuthAccessTokenSecret("xxxxxxxxxxxxxxxxxxx");
        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();
        Query query = new Query("#hashtag");
        QueryResult result = twitter.search(query);
        Pattern pattern = Pattern.compile("http://t.co/\\w{10}");
        Pattern imagePattern = Pattern.compile("https\\:\\/\\/pbs\\.twimg\\.com/media/\\w+\\.(png | jpg | gif)(:large)?");
        for (Status status : result.getTweets()) {
            if (status.isRetweet())
                continue;
            System.out.println("@" + status.getUser().getScreenName() + ":" + status.getText());
            Matcher matcher = pattern.matcher(status.getText());

                if (matcher.find()) {
                    System.out.println("found a t.co url");
                    URL oracle = new URL(matcher.group());
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(oracle.openStream()));

                    String inputLine;
                    while ((inputLine = in.readLine()) != null) {
                        matcher = imagePattern.matcher(inputLine);

                        if (matcher.find())
                            System.out.println("YAYAAYAYAYYAYAYAYAYAYAYAYAYAAYAYYAYAAYYAYAYAYA: " + matcher.group());
                    }

                    in.close();

            }

        }
    }
}

最佳答案

有一种更简单的方法来检索推文中的图像。
如果推文中插入了图像,您可以使用 getMediaEntities() 获取媒体数据,然后检索url 与 getMediaURL()
你应该做这样的事情

MediaEntity[] media = status.getMediaEntities(); //get the media entities from the status
for(MediaEntity m : media){ //search trough your entities
    System.out.println(m.getMediaURL()); //get your url!
}

关于java - 如何使用 Twitter4J 检索推文中的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27954818/

相关文章:

java - GWT + JDO + 数组列表

python - 使用字典计算文件中的单词数不起作用

android - 使用 Parse Twitter/Facebook 身份验证注销或切换帐户

java - 如何将 oAuth 与 twitter4j 一起使用?

java - Quartz 在启动时运行作业

java - 使用 .equals() 和 == 运算符比较两个对象

java - 创建http响应作为mockito的返回值

jquery 无法使用 twitter api 处理 404 错误

java - 我怎样才能只使用java获取英文推文?

java - 根据位置和跟踪关键字过滤推文