#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. Отлично, что это удалось!