如何使用twitter4j检索tweets中的图像?

qkf9rpyu  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(521)

我想发出一个关键字或hashtag的查询,并检索包含关键字的所有tweet中的所有图像。我可以使用twitter4j和java轻松地发出查询并检索结果tweets。我知道 http://t.co/x 我可以在浏览器中访问链接并查看相关图像。那张照片在 https://pbs.twimg.com/xx . 看来我要做的就是在我的代码中加入这个过程!
我可以解析 http://t.co/x 链接在每个推特很容易。但是,当我从该链接检索所有html时,我没有看到任何 https://pbs.twimg.com/x 图像:(。我认为twitter正在通过javascript加载这些图像。
有没有什么方法可以让我很容易地检索到每一条推特上的图片??
到目前为止,我的情况是:

  1. package com.company;
  2. import twitter4j.*;
  3. import twitter4j.conf.ConfigurationBuilder;
  4. import java.io.BufferedReader;
  5. import java.io.InputStreamReader;
  6. import java.net.URL;
  7. import java.util.regex.Matcher;
  8. import java.util.regex.Pattern;
  9. public class Main {
  10. public static void main(String[] args) throws Exception {
  11. ConfigurationBuilder cb = new ConfigurationBuilder();
  12. cb.setDebugEnabled(true)
  13. .setOAuthConsumerKey("xxxxxxxxxx")
  14. .setOAuthConsumerSecret("xxxxxxxxxxxx")
  15. .setOAuthAccessToken("xxxxxxxxx-xxx-xxxxxxxx")
  16. .setOAuthAccessTokenSecret("xxxxxxxxxxxxxxxxxxx");
  17. TwitterFactory tf = new TwitterFactory(cb.build());
  18. Twitter twitter = tf.getInstance();
  19. Query query = new Query("#hashtag");
  20. QueryResult result = twitter.search(query);
  21. Pattern pattern = Pattern.compile("http://t.co/\\w{10}");
  22. Pattern imagePattern = Pattern.compile("https\\:\\/\\/pbs\\.twimg\\.com/media/\\w+\\.(png | jpg | gif)(:large)?");
  23. for (Status status : result.getTweets()) {
  24. if (status.isRetweet())
  25. continue;
  26. System.out.println("@" + status.getUser().getScreenName() + ":" + status.getText());
  27. Matcher matcher = pattern.matcher(status.getText());
  28. if (matcher.find()) {
  29. System.out.println("found a t.co url");
  30. URL oracle = new URL(matcher.group());
  31. BufferedReader in = new BufferedReader(
  32. new InputStreamReader(oracle.openStream()));
  33. String inputLine;
  34. while ((inputLine = in.readLine()) != null) {
  35. matcher = imagePattern.matcher(inputLine);
  36. if (matcher.find())
  37. System.out.println("YAYAAYAYAYYAYAYAYAYAYAYAYAYAAYAYYAYAAYYAYAYAYA: " + matcher.group());
  38. }
  39. in.close();
  40. }
  41. }
  42. }
  43. }
bvjxkvbb

bvjxkvbb1#

下载所有处于twitter4j状态的媒体

  1. for (MediaEntity m : medias) {
  2. try {
  3. URL url = new URL(m.getMediaURL());
  4. InputStream in = new BufferedInputStream(url.openStream());
  5. ByteArrayOutputStream out = new ByteArrayOutputStream();
  6. byte[] buf = new byte[1024];
  7. int n = 0;
  8. while (-1 != (n = in.read(buf))) {
  9. out.write(buf, 0, n);
  10. }
  11. out.close();
  12. in.close();
  13. byte[] response = out.toByteArray();
  14. FileOutputStream fos = new FileOutputStream(file.getAbsolutePath() + "\\" + m.getId() + "." + getExtension(m.getType()));
  15. fos.write(response);
  16. fos.close();
  17. } catch (Exception ex) {
  18. ex.printStackTrace();
  19. }
  20. }

获取文件扩展名

  1. private String getExtension(String type) {
  2. if (type.equals("photo")) {
  3. return "jpg";
  4. } else if (type.equals("video")) {
  5. return "mp4";
  6. } else if (type.equals("animated_gif")) {
  7. return "gif";
  8. } else {
  9. return "err";
  10. }
  11. }
展开查看全部
p8h8hvxi

p8h8hvxi2#

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

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

相关问题