Как получить предварительный просмотр фотографий в app.net
Когда у меня есть app.net как URL https://photos.app.net/5269262/1
- Как я могу получить эскиз изображения сообщения?
Запуск curl на выше URL показывает перенаправление
bash-3.2$ curl -i https://photos.app.net/5269262/1
HTTP/1.1 301 MOVED PERMANENTLY
Location: https://alpha.app.net/pfleidi/post/5269262/photo/1
После этого дает HTML-страницу, которая содержит изображение в виде
img src='https://files.app.net/1/60621/aWBTKTYxzYZTqnkESkwx475u_ShTwEOiezzBjM3-ZzVBjq_6rzno42oMw9LxS5VH0WQEgoxWegIDKJo0eRDAc-uwTcOTaGYobfqx19vMOOMiyh2M3IMe6sDNkcQWPZPeE0PjIve4Vy0YFCM8MsHWbYYA2DFNKMdyNUnwmB2KuECjHqe0-Y9_ODD1pnFSOsOjH' data-full-width='2048' data-full-height='1536'
Внутри большего блока <div>
теги.
Файлы api в app.net позволяют получать миниатюры, но я почему-то не вижу связи между этими конечными точками и указанными выше URL.
2 ответа
Photos.app.net - это просто перенаправитель. Это не является частью самого API. Чтобы получить миниатюру, вам нужно будет извлечь файл напрямую, используя конечную точку выборки файла и идентификатор файла ( http://developers.app.net/docs/resources/file/lookup/) или получите сообщение, в которое включен файл, и изучите аннотацию oembed.
В данном случае речь идет об идентификаторе записи 5269262, а URL-адрес для извлечения этого сообщения с аннотацией - https://alpha-api.app.net/stream/0/posts/5269262?include_annotations=1 и если вы изучите В результате json документа вы увидите thumbnail_url.
Для полноты картины я хочу опубликовать окончательное решение для меня здесь (на Java) - оно основывается на хорошем и принятом ответе Джонатона Дуэрига:
private static String getAppNetPreviewUrl(String url) {
Pattern photosPattern = Pattern.compile(".*photos.app.net/([0-9]+)/.*");
Matcher m = photosPattern.matcher(url);
if (!m.matches()) {
return null;
}
String id = m.group(1);
String streamUrl = "https://alpha-api.app.net/stream/0/posts/"
+ id + "?include_annotations=1";
// Now that we have the posting url, we can get it and parse
// for the thumbnail
BufferedReader br = null;
HttpURLConnection urlConnection = null;
try {
urlConnection = (HttpURLConnection) new URL(streamUrl).openConnection();
urlConnection.setDoInput(true);
urlConnection.setDoOutput(false);
urlConnection.setRequestProperty("Accept","application/json");
urlConnection.connect();
StringBuilder builder = new StringBuilder();
br = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream()));
String line;
while ((line=br.readLine())!=null) {
builder.append(line);
}
urlConnection.disconnect();
// Parse the obtained json
JSONObject post = new JSONObject(builder.toString());
JSONObject data = post.getJSONObject("data");
JSONArray annotations = data.getJSONArray("annotations");
JSONObject annotationValue = annotations.getJSONObject(0);
JSONObject value = annotationValue.getJSONObject("value");
String finalUrl = value.getString("thumbnail_large_url");
return finalUrl;
} .......