...

вторник, 25 марта 2014 г.

Скрытые возможности VK.API или ищем приватные фото ВКонтакте

ВКонтакте существует множество пабликов, таких как: 90-60-90, 40 КГ, Спортивные девушки. В данных пабликах пользователи выкладывают фотографии своих фигур, фотографии «до» и «после» диеты / занятия спортом и прочее. Общее количество фотографий в альбомах этих групп порой превышает десятки тысяч. Выкладывая фотографии, многие не задумываются о последствиях, наивно пологая что если кинуть свою фотку в тысячи подобных, то никто ее и не найдет. Под катом описан процесс поиска фотографий конкретного пользователя в группах.


Постановка задачи



Имеется:


  1. uid — ID пользователя ВКонтакте

  2. gid — ID группы ВКонтакте




Необходимо:


  1. Найти все фотографии пользователя uid, опубликованных в группе gid

  2. Определить в каком альбоме находится каждая фотография


API ВКонтакте



В контакте отсутствует метод прямого получения фотографий, опубликованных конкретным пользователем в конкретной группе. Однако, добиться нужного результата можно по следующей схеме:

1. Получаем список альбомов, используя метод photos.getAlbums:

VK.api("photos.getAlbums", { gid: gid }, function(result){
if (result.response){
// Список альбомов лежит в массиве result.response
// Идентификатор альбома находится в поле aid
}else{
// Не удалось получить список альбомов
}
});




2. Получаем список фотографий, находящихся в альбоме (aid), используя метод photos.get:

VK.api("photos.get", { gid: gid, aid: aid }, function(result){
if (result.response){
// Список фотографий лежит в массиве result.response
// ID владельца фотографии содержится в поле owner_id
// ID фотографии содержится в поле pid
}else{
// Не удалось получить список фотографий в альбоме
}
});




3. Получаем URL фотографии, используя метод photos.getById

VK.api("photos.getById", { photos: pids }, function(result){
if(result.response){
for(var i=0; i<result.response.length; i++){
var p = result.response[i],
src = p.src_big; // URL фотографии
if (p.src_xbig)
src = p.src_xbig;
if (p.src_xxbig)
src = p.src_xxbig;
if (p.src_xxxbig)
src = p.src_xxxbig;
}
}
});


Как ускорить поиск?



Перебирать все группы довольно длительный процесс и запускать его каждый раз при поиске фотографии конкретного человека дело не целесообразно. Для ускорения поиска достаточно проиндексировать все фотографии путем добавления индекса во внутреннюю таблицу.

В таблице достаточно содержать 3 поля:


  • uid — ID пользователя

  • gid — ID группы

  • pid — ID фотографии




После индексации групп, достаточно выполнить запрос

SELECT * FROM table WHERE uid = uid




И обращаться к API с целью получения ссылки на фотографию.
Поиск фотографий друзей



Используя метод friends.get, можно получить список друзей, а затем произвести поиск по БД с целью получения фотографий друзей:

VK.api('friends.get', { user_id: uid }, function(result){
if(result.response){
// Далее производим поиск фотографий по ID друзей
}
});


Ссылки




  • Сайт для поиска фотографий: photovk.ru

  • Приложение ВКонтакте для поиска фотографий: vk.com/app4262126


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


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

Отправить комментарий