Vk api wall get Пример

Добрый день, давно я ничего не писал — много было причин. За это время накопилось достаточно большое количество материала и я постараюсь его сюда выставить как можно полнее. Сегодня я хочу рассказать о работе с API контакта через Python, а примером послужит — скачивание стены журнала Евгений Онегин. Глава 11. Если вам лень читать как я всё это делал, а охота поскорее скачать свою стену, переходите сразу к разделу «Отчёт и тестирование».

Подготовка

Первое, что нужно сделать — скачать АПИ и зарегистрировать приложение, получив его идентификатор ( если вам не охота регистрировать своё приложения и получать его идентификатор, то просто пропустите этот шаг — по умолчанию программа подставит мой идентификатор приложения) . АПИ доступно по этому адресу https://pypi.python.org/pypi/vkontakte .Там есть инструкция по установке. Если-же не получается по ней, то скачайте файлы, разархивируйте, в терминале выполните (Linux)

После установки мы можем пользоваться функционалом этой библиотеки, однако с некоторых пор стало обязательным создание окна браузера, чтоб пользователь там ввёл свои логин и пароль, и только потом мы получили token_id для работы с API питона. Чтоб не лезть в эти дебри можно прикинуться окном броузера, фиктивно ввести туда валидные логин и пароль и получить свой законный токен.

VK-API Пример выполнения кода методом execute и users get

В этой статье рассказано более подробно про этот маленький хак. В результате статьи был создан класс авторизации, в который сообщается логин, пароль, идентификатор приложения, запрашиваемые права. Я немного подредактировал этот файл, так как он не работал. Скачать мой вариант можно тут.

Первые шаги

Для первого примера давайте сделаем простую авторизацию с неким запросом.

#!/usr/bin/env python3 # -*- coding: utf-8 -*- import vk_auth import vkontakte def main(): (token,user_id) = vk_auth.auth(‘$EMAIL’, ‘$PASSWD’, ‘$ID_APP’, ‘$SOPE’) vk = vkontakte.API(token=token) print «Hello vk API , server time is «,vk.getServerTime() return 0 if __name__ == ‘__main__’: main()

Ничего сложного — импортируем класс авторизации, импортируем библиотеку c API, получаем токен и идентификатор, используем АПИ-шные функции.

Пример

Теперь пришло время к массивному, серьёзному, а главное практичному примеру — скачивание стены Вконтакте. Идея скачивания стены зародилась из острой необходимости. Паблик Вконтакте организован очень удобно, за одним исключением — старую информацию на стене невозможно найти. Родилась идея — скачать всю стену из паблика и разбить её на несколько HTML фалов для лучшей скорости доступа.
Перед началом работы нужно поставить грамотное техническое задание.

Техническое задание

  • Имя пользователя
  • Пароль
  • Идентификатор группыпабликастраницы
  • Количество постов для скачивания
  • Начиная с какого сообщения скачивать
  • На сколько HTML блоков разбивать

Реализация

Обобщённый
алгоритм работы программы

Vk api обзор метода wall.get на примере.


Определимся с каркасом программы и входящими параметрами.
Набросаем пока такой код. Я использовал библиотеку OptionParser для парсинга параметров — она идёт из коробки и о-о-очень удобная. Следующий шаг — организация разбивки на тома. Чуть изменив старый код, мы получаем алгоритм, который разобьёт информацию на необходимое количество томов. Вот код. Далее необходимо использовать vk API и загружать посты из Контакта. Покурив документацию, я быстро нашел необходимую функцию . Апи контакта позволяет отправлять JSON запросы и получать JSON ответы. Используемой нами vkAPI инкапсулирует JSON запросы в список переменных. Не могу сказать, что это очень удобно, но я не нашел другого способа. Для запроса постов со стены определённой группы нам необходимо выполнить следующий код

Еще по теме:  Как сделать поддельные сообщения ВК

posts = vk.get(‘wall.get’, owner_id=owner_id,offset=offset,count=count)

После выполнения этого кода в posts запишется count постов со смещением offset. Стоит обратить внимание, что на количество скачиваемых постов есть ограничение и, если я не ошибаюсь, оно равно 100. Я взял значение 50, как оптимальное количество скачиваемых постов за 1 итерацию цикла.

В прошлом листинге я выделил 2 функции: скачивание постов get_posts() и форматирование в HTML posts_to_html(), и поставил на них заглушки. Теперь я заполняю get_posts() кодом, который привёл выше. В техническом задании ещё требовалось скачать все комментарии к коду. Я разделил функцию скачивания постов и оформления их в html, а значит скачивание комментариев должно производиться вместе со скачиванием постов и записываться в одну переменную. Благо, JSON — формат динамический и его несложно дополнить одним полем, в котором будут храниться комментарии.
В документации находим функцию скачивания комментариев и реализуем. Функцию скачивания поста с комментариями разобьём на 2 функции — скачивание поста и скачивание комментариев к нему. Получаем вот такой код:

def get_comments(vk,owner_id,post_id,count): size = 50 comments = [] if(count0): post_id = posts[i][‘id’] comments = get_comments(vk,owner_id,post_id,coments_count) posts[i][‘comments’][‘data’]=comments print len(comments),coments_count return posts

Теперь функция get_posts вернёт посты, в которых в поле comments.data будут храниться комментарии к ним.
На этом работа со скачиванием данных закончена.Необходимо ещё из этой всей канители сформировать красивые HTML странички. Скажу честно — для меня это самый адский труд. Но других путей нет — вперёд.

Формирование HTML страниц.

Для формирования я написал целый ряд шаблонов, в которые потом буду вставлять данные из JSON. Я не буду их всех здесь приводить. Просто дам ссылку на готовый проект. Функция, формирования HTML вышла огромная и некрасивая.Если будут люди — профи в HTML, буду им благодарен за более благоприятный дизайн, который более схож с Vk.

Скачивание Данных.

Одним из пунктов ТЗ был удобный локальный просмотр. В данный момент все ссылки на картинки и аудиозаписи — абсолютные (то есть ведут в интернет) а нужно чтоб они лежали рядом и при отсутствии интернета можно было и картинку посмотреть и музычку прослушать. Можно это сделать питоном через жуткую Караганду. Но я предпочёл вариант поэлегантней — wget. Эта стандартная линуксовская интрнето-качалка и она умеет скачивать web-страницу с информацией на ней.Чтобы скормить HTML-ки нужно ещё почитать man wget и найти несколько необходимых ключей.
Получился вот такой скрипт:

$wget -B -k -r -l0 —force-html -i name-*.html -P ./data

Одно только НО — wget скачает всю информацию, но не преобразует ссылки.Может, конечно, он это и умеет делать, но я не нашел как. Поэтому в питоне мы напишем преобразование от любого контактовского адреса хранения фотоаудио в ссылку на рядом лежащую папку _data. Я умышленно разделил имя группы и номер тома, чтобы можно было переместить за собой только один том и не тащить за собой несчётное количество информации, которая не используется.

def convert_lincs(txt,folder,recurce = 0): out = re.sub(«http://»,folder,txt) return out

Как видите, благодаря мощи регулярных выражений эту задачу мы решили в 1 строку.
Ещё я столкнулся с проблемой постоянно прерывающийся связи (у меня плохой интернет) и отказа со стороны Контакта из-за высокой частоты запросов. Эти 2 фактора периодически валили программу, поэтому я сделал отказоустойчивые обёртки для всех методов обращения в интернет, которые использовал. Получилось вот так:

Еще по теме:  Как повернуть видео Вконтакте на 90 градусов

def wall_getComments(vk,owner_id,post_id,count,recurce = 0): if (recurce ==20): return [] try: com = vk.get(‘wall.getComments’, owner_id=owner_id,post_id=post_id,count=count) except: time.sleep(1) print «Error wall_getComments try «,recurce com = wall_getComments(vk,owner_id,post_id,count,recurce = recurce+1) return com def wall_get(vk,owner_id,offset,count,recurce = 0): if (recurce ==20): return [] try: res = vk.get(‘wall.get’, owner_id=owner_id,offset=offset,count=count) except: time.sleep(1) print «Error wall_get try «,recurce res = wall_get(vk,owner_id,offset,count,recurce = recurce +1) return res def users_get(vk,uids,fields,recurce = 0): if (recurce ==20): return [] try: res = vk.get(‘users.get’,uids=uids,fields=»photo») except: time.sleep(1) print «Error users_get try «,recurce res = users_get(vk,uids,fields,recurce = recurce +1) return res def groups_getById(vk,group_ids,recurce = 0): if (recurce ==20): return [] try: res = vk.get(‘groups.getById’, group_ids=group_ids) except: time.sleep(1) print «Error groups_getById try «,recurce res = groups_getById(vk,group_ids,recurce = recurce +1) return res

При отказе сети или ошибке получения данных я жду полсекунды и повторяю попытку.

Отчёт и тестирование

Результат работы я публикую на Github. Так , что вы можете присоединиться к проекту, взять мои наработки, добавить свои, переделать под свои нужды и просто развивать проект.
И вот, наконец, тестирование. Обратите внимание на то, что я буду использовать Python2.X и не ругайтесь заранее, увидев что-то вроде этого при попытке запустить программу:

  • -e EMAIL, —email=EMAIL Имеил для авторизации
  • -p PASSWD, —passwd=PASSWD Пароль для авторизации, если вы его не задали в явном виде, программа попросит вас ввести его вовремя выполнения.Конечно пароль будет невидим.
  • -i GID, —groupid=GID Идентификатор группы, стену которой необходимо скачать
  • -c COUNT, —count=COUNT — количество постов, которые необходимо скачать. Если не задано — выкачивает все записи со стены.
  • -f OFFSET, —offset=OFFSET — смещение, с которого необходимо начать скачивание, если не задано , то 0.
  • -s SPLIT_NUM, —split=SPLIT_NUM — количество блоков, на которые разбить скачанные посты, если не задано, то 1
  • -a APP_ID, —app_id=APP_ID — идентификатор приложения, которое вы получили зарегестрировавшись ( если не указано, то используется мой идентификатор приложения)
  • -d DOWNLOAD, —download_all=DOWNLOAD — ключ, который определяет, следует ли загружать мультимедиа. Возможные значения:
  • 0 — Не загружать ( по умолчанию)
  • 1 — загружать после того, как основная информация загрузится

Типичный пример использования:

python2 ./WallCopy.py -e EMAIL -i GROUP_ID

При этом загрузятся все записи со стены с нулевым смещением, но ссылки останутся абсолютными. Пароль программа спросит в интерактивном режиме, а остальные опции примут значения по умолчанию.

Расширенный пример использования:

python2 ./WallCopy.py -e EMAIL -p PASSWORD -i GROUP_ID -c 1000 -f 500 -s 8 -a APP_ID -d 1

При этом загрузится 1000 постов со смещением на 500 и разобьётся на 8 томов, и картинки с музыкой загрузятся на компьютер.

  1. Загрузка только фото и игнорирование музыки;
  2. Загрузка документов;
  3. Загрузка репостов;
  4. Более похожий дизайн на Vk;
  5. Превью Видео;
  6. Требование Linux ( wget )
  7. Поддержка только Python 2.X
  8. Использование ООП

Источник: alexkutsan.blogspot.com

Метод wall.get (VK API) — Как вывести записи на JS?

Есть код, который выводит текст записей. А как выводить картинки записей так, чтобы работало? А то я пробовал — у меня не работало!

var url = ‘https://api.vk.com/method/wall.get?owner_id=1filter=all var answer; $(document).ready(function() < $.ajax (< url: url, type: ‘get’, crossDomain: true, dataType: ‘jsonp’, success: function(response) < answer = response; answer.response.items.forEach(function(item) < if((item.text != ‘undefined’) (item.text != »)) < console.log(item.text); >>); >, error: function(error) < console.log(‘Ошибка’); console.log(error); >>); >);
Отслеживать
27.1k 2 2 золотых знака 45 45 серебряных знаков 76 76 бронзовых знаков
задан 29 фев 2016 в 18:58
349 1 1 золотой знак 4 4 серебряных знака 16 16 бронзовых знаков
Как конкретно пытались вывести картинки и что именно не работало?
29 фев 2016 в 19:18
у вас ошибка в урле, и нет там никаких картинок jsbin.com/yopajupaje/edit?js,console,output
29 фев 2016 в 19:33
29 фев 2016 в 19:37

Еще по теме:  Как посмотреть дату создания ВК другого человека

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Вы хоть в json заглядывали, там ниже text есть картинки в любом размере JSON.response.items[1].attachments[0].photo.photo_604 :
Поставьте для фокса плагин JSON-handle — он позволяет бродить по json.

Итого: в JSON.response.items[1].attachments хранятся прикрепленные файлы, массив. Далее JSON.response.items[1].attachments[0].photo — тут объект с свйоствами фото, его разные размеры, высота и ширина JSON.response.items[1].attachments[0].photo.photo_604 или c шириной 130 JSON.response.items[1].attachments[0].photo.photo_130 . Если фото несколько, выводите их циклом.

#testvk

titile var url = ‘https://api.vk.com/method/wall.get?domain=gamer_by_lifefilter=allcallback=?’; var answer, output =»; $(document).ready(function() < $.ajax (< url: url, type: ‘get’, crossDomain: true, dataType: ‘json’, success: function(response) < answer = response; answer.response.items.forEach(function(item) < if((item.text != ‘undefined’) (item.text !== »)) < output += ‘

‘ + item.text + ‘

‘; if (item.attachments !== undefined) < for(var i = 0, length1 = item.attachments.length; i < length1; i++)< if (item.attachments[i].type == ‘photo’) < //console.log(item.attachments[i]); output += ‘‘; > > > output += »; > >); document.body.innerHTML = output; >, error: function(error) < console.log(error); >>); >);

Источник: ru.stackoverflow.com

API ВКонтакте примеры

api вконтакте, api примеры, api vk, api запросы

Решил сегодня немного по разнообразить с примерами API ВКонтакте. Думаю из данных примеров, Вы сможете найти для себя что то подходящие, ведь ситуации бывают разные и каждая из которых так или иначе решается по разному. Поэтому случаю, представляю Вам тему урока API ВКонтакте примеры. Что же мы будем тут конкретно рассматривать?

Да, пожалуй, немного пройдемся по сообществам, потом можно будет пару слов сказать уже про пользователей. В общем, приступаем!

Первый пример. Кто онлайн в сообществе?

  • count — количество пользователей в сообществе
  • uid — идентификатор пользователя
  • first_name — имя пользователя
  • last_name — фамилия пользователя
  • online — поле онлайн (0 — оффлайн, 1 — онлайн)

https://api.vk.com/method/groups.getMembers?group_id=iroothelpfields=photo
Третий пример. Сбор всех идентификаторов пользователей в указанном сообществе.

К примеру, Вам нужно собрать все идентификаторы uid пользователей, которые находятся в определенном сообществе, допустим, в нашем с Вами сообществе iRootHelp. Делается это очень просто.

Кстати, подобный API запрос, мы рассматривали с Вами в предыдущем материале скрипт проверки пользователя в сообществе ВКонтакте.

Помимо запроса, там я наглядно показывал и рассказывал, как можно посредством JSON формата, разобрать все по частям.

https://api.vk.com/method/groups.getMembers?group_id=iroothelp
Четвертый пример.

Теперь, давайте, выведем все последние пять записей нашего сообщества iRootHelp. В массиве мы получим: отправителя, дату, название, текст, большую и маленькую картинки, их размеры. В поле fields мы подставляем с Вами все записи на стене сообщества, далее в поле domain указываем адрес сообщества и в последнем поле count указываем количество выводимых записей, в данном случае, оно равно пяти последним записям.

https://api.vk.com/method/wall.get?filter=allcount=5

Пожалуй, на этом все, так как говорить про все примеры API ВКонтакте, будет очень долго и не имеет никакого смысла, все можно посмотреть в документации. Данный материал, носит характер ознакомления с данной темой. Если же у Вас имеются какие то вопросы или не можете решить задачу, — пишите, постараюсь помочь! Всем удачи!)

Источник: roothelp.ru

Рейтинг
( Пока оценок нет )
Загрузка ...