Скрытые возможности 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

ссылка на оригинал статьи http://habrahabr.ru/post/216971/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *