首页 > 解决方案 > 在处理 3 时从 twitter API 中提取图像

问题描述

我对此很陌生,所以请多多包涵。我正在尝试使用 twitter4j 使用关键字搜索从 twitter 中提取图像。我希望它循环显示随机定位在屏幕上的图像。

我下面的这段代码是我在网上找到的不同代码的组合。它目前使用这些关键字查找推文并在控制台中显示它们,但是,它没有在屏幕上显示它们,我不知道为什么......</p>

另一件事是,我认为它正在从 twitter 进行直播,因此在代码运行时立即拉出推文,所以当我输入一个不起眼的关键字时,我没有得到很多结果,我希望它搜索最后一个100 条带有图片的推文使用关键字,以便我获得更多结果

我真的很感激我能得到的所有帮助!谢谢你

///////////////////////////// Config your setup here! ////////////////////////////

// { site, parse token }
String imageService[][] = {
    {
      "http://twitpic.com",
      "<img class=\"photo\" id=\"photo-display\" src=\""
    },
    {
      "http://twitpic.com",
      "<img class=\"photo\" id=\"photo-display\" src=\""
    },
    {
      "http://img.ly",
      "<img alt=\"\" id=\"the-image\" src=\""
    },
    {
      "http://lockerz.com/",
      "<img id=\"photo\" src=\""
    },
    {
      "http://instagr.am/",
      "<meta property=\"og:image\" content=\""
    } {
      "http://pic.twitter.com",
      "<img id
    };

    // This is where you enter your Oauth info
    static String OAuthConsumerKey = KEY_HERE;
    static String OAuthConsumerSecret = SECRET_HERE;
    static String AccessToken = TOKEN_HERE;
    static String AccessTokenSecret = TOKEN_SECRET_HERE;
    cb.setIncludeEntitiesEnabled(true);
    Twitter twitterInstance = new TwitterFactory(cb.build()).getInstance();

    // if you enter keywords here it will filter, otherwise it will sample

    String keywords[] = {
      "#hashtag" //sample keyword!!!!!!!!
    };

    ///////////////////////////// End Variable Config ////////////////////////////

    TwitterStream twitter = new TwitterStreamFactory().getInstance();


    PImage img;
    boolean imageLoaded;

    void setup() {
      frameRate(10);
      size(800, 600);
      noStroke();
      imageMode(CENTER);

      connectTwitter();
      twitter.addListener(listener);
      if (keywords.length == 0) twitter.sample();
      else twitter.filter(new FilterQuery().track(keywords));
    }

    void draw() {
      background(0);
      if (imageLoaded) image(img, width / 5, height / 5);
      //image(loadImage((status.getUser().getImage())), (int)random(width*.45), height-(int)random(height*.4));
    }

    // Initial connection
    void connectTwitter() {
      twitter.setOAuthConsumer(OAuthConsumerKey, OAuthConsumerSecret);
      AccessToken accessToken = loadAccessToken();
      twitter.setOAuthAccessToken(accessToken);
    }

    // Loading up the access token
    private static AccessToken loadAccessToken() {
      return new AccessToken(AccessToken, AccessTokenSecret);
    }

    // This listens for new tweet
    StatusListener listener = new StatusListener() {

      //@Override
      public void onStatus(Status status) {
        System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
      }

      //@Override
      public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
        System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
      }

      //@Override
      public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
        System.out.println("Got track limitation notice:" + numberOfLimitedStatuses);
      }

      //@Override
      public void onScrubGeo(long userId, long upToStatusId) {
        System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
      }

      //@Override
      public void onStallWarning(StallWarning warning) {
        System.out.println("Got stall warning:" + warning);
      }

      //@Override
      public void onException(Exception ex) {
        ex.printStackTrace();
      }
    };
    public void onStatus(Status status) {

      String imgUrl = null;
      String imgPage = null;

      // Checks for images posted using twitter API

      if (status.getMediaEntities() != null) {
        imgUrl = status.getMediaEntities()[0].getMediaURL().toString();
      }
      // Checks for images posted using other APIs
      else {
        if (status.getURLEntities().length > 0) {
          if (status.getURLEntities()[0].getExpandedURL() != null) {
            imgPage = status.getURLEntities()[0].getExpandedURL().toString();
          } else {
            if (status.getURLEntities()[0].getDisplayURL() != null) {
              imgPage = status.getURLEntities()[0].getDisplayURL().toString();
            }
          }
        }

        if (imgPage != null) imgUrl = parseTwitterImg(imgPage);
      }

      if (imgUrl != null) {

        println("found image: " + imgUrl);

        // hacks to make image load correctly

        if (imgUrl.startsWith("//")) {
          println("s3 weirdness");
          imgUrl = "http:" + imgUrl;
        }
        if (!imgUrl.endsWith(".jpg")) {
          byte[] imgBytes = loadBytes(imgUrl);
          saveBytes("tempImage.jpg", imgBytes);
          imgUrl = "tempImage.jpg";
        }

        println("loading " + imgUrl);
        img = loadImage(imgUrl);
        imageLoaded = true;
      }
    }

    public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
      System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
    }
    public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
      System.out.println("Got track limitation notice:" + numberOfLimitedStatuses);
    }
    public void onScrubGeo(long userId, long upToStatusId) {
      System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
    }

    public void onException(Exception ex) {
      ex.printStackTrace();
    }

    // Twitter doesn't recognize images from other sites as media, so must be parsed manually
    // You can add more services at the top if something is missing

    String parseTwitterImg(String pageUrl) {

      for (int i = 0; i < imageService.length; i++) {
        if (pageUrl.startsWith(imageService[i][0])) {

          String fullPage = ""; // container for html
          String lines[] = loadStrings(pageUrl); // load html into an array, then move to container
          for (int j = 0; j < lines.length; j++) {
            fullPage += lines[j] + "\n";
          }

          String[] pieces = split(fullPage, imageService[i][1]);
          pieces = split(pieces[1], "\"");

          return (pieces[0]);
        }
      }
      return (null);
    }

标签: imagetwitterprocessingtwitter4j

解决方案


推荐阅读