Java 如何使用Twitter4J检索推文中的图像?
我想发出一个关键字或hashtag的查询,并从包含该关键字的所有tweet中检索所有图像。我可以使用Java轻松地发出查询并检索结果tweet。我知道Java 如何使用Twitter4J检索推文中的图像?,java,twitter,twitter4j,Java,Twitter,Twitter4j,我想发出一个关键字或hashtag的查询,并从包含该关键字的所有tweet中检索所有图像。我可以使用Java轻松地发出查询并检索结果tweet。我知道http://t.co/xxxx我可以在浏览器中访问并查看相关图像的链接。该图像位于https://pbs.twimg.com/xxxxx。看来我所要做的就是在我的代码中加入这个过程 我可以解析http://t.co/xxxx轻松链接每条推文。但是,当我从该链接检索所有html时,我没有看到任何https://pbs.twimg.com/xxxxi
http://t.co/xxxx
我可以在浏览器中访问并查看相关图像的链接。该图像位于https://pbs.twimg.com/xxxxx
。看来我所要做的就是在我的代码中加入这个过程
我可以解析http://t.co/xxxx
轻松链接每条推文。但是,当我从该链接检索所有html时,我没有看到任何https://pbs.twimg.com/xxxx
images:(。我认为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();
}
}
}
}
在tweet中检索图像有一种更简单的方法。
如果tweet中插入了图像,则可以使用
getMediaEntities()
获取媒体数据,然后使用getMediaURL()检索url
你应该这样做
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!
}
下载所有处于twitter4J状态的媒体
for (MediaEntity m : medias) {
try {
URL url = new URL(m.getMediaURL());
InputStream in = new BufferedInputStream(url.openStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n = 0;
while (-1 != (n = in.read(buf))) {
out.write(buf, 0, n);
}
out.close();
in.close();
byte[] response = out.toByteArray();
FileOutputStream fos = new FileOutputStream(file.getAbsolutePath() + "\\" + m.getId() + "." + getExtension(m.getType()));
fos.write(response);
fos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
获取文件扩展名
private String getExtension(String type) {
if (type.equals("photo")) {
return "jpg";
} else if (type.equals("video")) {
return "mp4";
} else if (type.equals("animated_gif")) {
return "gif";
} else {
return "err";
}
}