Instagram и обработка — просмотр в реальном времени

#api #processing #instagram

#API #обработка #Instagram

Вопрос:

Я работаю над небольшим приложением, похожим на instaprint, и мне нужна помощь. Я использую исходный код из Globalgram Эндрю Хаскина, он выполняет поиск в Instagram по определенному хэштегу и отображает самое последнее изображение, опубликованное с этим хэштегом. Проблема в том, что он делает это только один раз, мне нужно, чтобы он постоянно искал хэштег и отображал изображение при добавлении нового, поэтому обновление, я возился с ним, но безрезультатно. Любая помощь будет с благодарностью

Код ниже :

 import com.francisli.processing.http.*;

PFont InstagramFont;
PImage backgroundimg;
PImage brand;
PImage userphoto;
PImage profilepicture;

String username;
String tag;
String[] tagStrings;


com.francisli.processing.http.HttpClient client;

void setup() {
  size(580, 900);
  smooth();
  backgroundimg = loadImage("iso_background.jpg");
  brand = loadImage("iso.jpg");

  InstagramFont = loadFont("Helvetica-Bold-36.vlw");

  client = new com.francisli.processing.http.HttpClient(this, "api.instagram.com");
  client.useSSL = true;

  //// instantiate a new HashMap
  HashMap params = new HashMap();
  //// put key/value pairs that you want to send in the request
  params.put("access_token", "------ACCESS TOKEN HERE------");
  params.put("count", "1");
  client.GET("/v1/tags/coffee/media/recent.json", params);
}

void responseReceived(com.francisli.processing.http.HttpRequest request, com.francisli.processing.http.HttpResponse response) {
  println(response.getContentAsString());

  //// we get the server response as a JSON object
  com.francisli.processing.http.JSONObject content = response.getContentAsJSONObject();

  //// get the "data" value, which is an array
  com.francisli.processing.http.JSONObject data = content.get("data");

  //// get the first element in the array
  com.francisli.processing.http.JSONObject first = data.get(0);

  //// the "user" value is another dictionary, from which we can get the "full_name" string value
  println(first.get("user").get("full_name").stringValue());
  //// the "caption" value is another dictionary, from which we can get the "text" string value
  //println(first.get("caption").get("text").stringValue());
  //// get profile picture
  println(first.get("user").get("profile_picture").stringValue());
  //// the "images" value is another dictionary, from which we can get different image URL data
  println(first.get("images").get("standard_resolution").get("url").stringValue());

  com.francisli.processing.http.JSONObject tags = first.get("tags");
  tagStrings = new String[tags.size()];
  for (int i = 0; i < tags.size(); i  ) {
    tagStrings[i] = tags.get(i).stringValue();
  }


  username = first.get("user").get("full_name").stringValue();


  String profilepicture_url = first.get("user").get("profile_picture").stringValue();
  profilepicture = loadImage(profilepicture_url, "png");

  String userphoto_url = first.get("images").get("standard_resolution").get("url").stringValue();
  userphoto = loadImage(userphoto_url, "png");

 //noLoop();
}


void draw() {
  background(255);
  imageMode(CENTER);
  image(brand, 100, height/1.05);


  if (profilepicture != null) {
    image(profilepicture, 60, 70, 90, 90);
  }
  imageMode(CENTER);
  if (userphoto != null) {
    image(userphoto, width/2, height/2.25, 550, 550);
  }

  textFont(InstagramFont, 20);
  if (username != null) {
    text(username, 110, 115);
    fill(0);
  }

   textFont(InstagramFont, 15);
  if ((tagStrings != null) amp;amp; (tagStrings.length > 0)) {
    String line = tagStrings[0];
    for (int i = 1; i < tagStrings.length; i  ) {
      line  = ", "   tagStrings[i];
    }
    text(line, 25, 720, 550, 50);
    fill(0);
  }

}
  

Комментарии:

1. Перекрестная публикация: forum.processing.org/two/discussion/6011 /…

Ответ №1:

AFAIK это должно быть

 client.GET("/v1/tags/coffee/media/recent.json", params);
  

строка, которая фактически опрашивает Instagram. Попробуйте обернуть это в функцию, подобную этой:

 void getGrams() {
  client.GET("/v1/tags/coffee/media/recent.json", params);
}
  

затем вызовите это один раз в setup(), а затем снова, когда захотите…

Я бы начал с попытки сделать это с помощью mousePressed () или keyPressed(), чтобы он срабатывал только один раз, когда вы действительно этого хотите

Не пытайтесь делать это в draw () без таймера (что-то вроде if(frameCount % 5000 == 0) того, который будет срабатывать каждые пять секунд ((что может быть слишком быстро, но вы поняли идею))

Комментарии:

1. Спасибо, Джесс, я собираюсь попробовать и сообщить вам, что произойдет!

2. Нет проблем. Если это полезный ответ, пожалуйста, подумайте о том, чтобы дать ему преимущество … и если он действительно работает, пожалуйста, подумайте о его принятии.

3. Отлично, что это удалось!