вытащить изображения из твиттер API на обработку 3 - PullRequest
0 голосов
/ 10 октября 2018

Я новичок в этом, поэтому, пожалуйста, потерпите меня.Я пытаюсь использовать поиск по ключевым словам, чтобы получить изображения из Twitter, используя twitter4j.Я хочу, чтобы он отображал изображения, расположенные случайным образом на экране в цикле.

Этот код, представленный ниже, представляет собой комбинацию различных кодов, которые я нашел в Интернете.В настоящее время он находит твиты с использованием этих ключевых слов и показывает их в консоли, однако он не отображает их на экране, и я не уверен, почему ...

Другое дело, что я думаю, что это живой эфириз твиттера, поэтому извлекаю твиты сразу во время выполнения кода, поэтому я не получаю много результатов, когда вставляю малоизвестное ключевое слово, я хочу, чтобы он выполнял поиск последних 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);
    }
...