vk.com — Сохранение аудиозаписей, документов, содержимого стены / Хабр
Я уже давно заметил, что данные в социальных сетях хранятся плохо. Например, сделанный вами репост окажется пустым, если автор оригинальной записи ее удалит. Недавние проблемы с аудиозаписями в vk стали последней каплей, и я решил сохранить локально все данные, которые могут представлять интерес
. Поискав готовые решения, я не нашел ничего, что бы устроило меня, поэтому за несколько дней был написан скрипт на Python.
Цели
Сохранить все, что можно: аудиозаписи, документы, стену. Со стены нужно утащить все приложения к постам, и комментарии со всеми приложениями тоже лишними не будут. Нужно это как минимум затем, чтобы сохранились все посты с музыкой и комментарии, где друзья отправляли хорошие треки
. Сразу скажу, что в моих целях не было читабельного бэкапа дополнительной информации (лайки, время создания записи и прочее).
За дело!
Процесс создания подобного приложения уже не разописан на хабре, поэтому повторять все подробности не стану, опишу шаги работы вкратце, а еще скажу пару слов о пролемах. Чтобы статья не была перегружена исходниками, в конце будет ссылка на github.
Соображения по ходу разработки
- Прежде всего, потребуется завести себе id приложения. Важно, чтобы тип был standalone, иначе некоторые методы vk api будут недоступны.
- Еще нужен id пользователя, данные которого будем сохранять. Свой найти можно на странице настроек
- Чтобы приложение работало, нужно разрешение пользователя, а точнее, access token. Прямого неинтерактивного способа получить токен нет, можно парсить страницу авторизации, но проще — попросить пользователя нажать на кнопку в браузере и скопировать url. За это отвечает функция auth():
url = "https://oauth.vk.com/oauth/authorize?" + \ "redirect_uri=https://oauth.
vk.com/blank.html&response_type=token&" + \ "client_id=%s&scope=%s&display=wap" % (args.app_id, ",".join(args.access_rights)) print("Please open this url:\n\n\t{}\n".format(url)) raw_url = raw_input("Grant access to your acc and copy resulting URL here: ") res = re.search('access_token=([0-9A-Fa-f]+)', raw_url, re.I)
-
У запросов vk api есть ограничение: не более пяти в секунду. Если обращаться к серверу слишком часто, он ответит ошибкой. Это достаточно удобно: по коду ошибки можно понять, что скрипт работает слишком быстро, подождать какое-то время и повторить запрос.
if result[u'error'][u'error_code'] == 6: # too many requests logging.debug("Too many requests per second, sleeping..") sleep(1) continue
- Периодически сервер vk требует решить каптчу, подозревая, что клиент — бот. В общем-то, правильно подозревает. Чтобы процесс сохранения не прерывался, приходится просить пользователя перейти по ссылке на картинку, разгадать каптчу и вбить ответ.
+=\-()$!#%&,.\w\s]’, ‘_’, name, flags=re.UNICODE).strip())
- Еще одна проблема с именами файлов: могут совпадать, например в случае с документами. Для этого к имени файла добавим (n), где n — первое число, дающее уникальное имя файла.
Продолжим
Код обращения к api взят из статьи хабраюзера dzhioev, и добавлена обработка ситуаций, описанных выше. Чтобы было, что сохранять (в случае с обработкой стены), надо сначала узнать количество постов:
#determine posts count (response, json_stuff) = call_api("wall.get", [("owner_id", args.id), ("count", 1), ("offset", 0)], args) count = response[0]
Дальше запрашиваем каждый пост по отдельности и разбираем его
for x in xrange(args.wall_start, args.wall_end): (post, json_stuff) = call_api("wall.get", [("owner_id", args.id), ("count", 1), ("offset", x)], args) process_post(("wall post", x), post, post_parser, json_stuff)
Результат запроса — это набор данных в JSON, которые разбираются в стандартные для python’а структуры с помощью json.loads() из стандартной библиотеки. В итоге, имеем хэш-массив, в котором некоторые поля (ключ-значение) несут полезную нагрузку, а остальные нас не интересуют. Чтобы руками не писать, какое поле каким методом обрабатывать, воспользуемся мощью рефлексии: будем искать метод, имя которого совпадает с интересующим ключом.
for k in raw_data.keys(): try: f = getattr(self, k) keys.append(k) funcs.append(f) except AttributeError: logging.warning("Not implemented: {}".format(k)) logging.info("Saving: {} for {}".format(', '.join(keys), raw_data['id'])) for (f, k) in zip(funcs, keys): f(k, raw_data)
Парсим
Теперь нужно разбираться с полями ответа. Интересные — это attachments, text, comments. Attachments — это список приложений к посту (аудио, картинки, документы, заметки), надо уметь скачивать каждый тип. Определяемся, каким методом обрабатывать каждый attachment, аналогичным способом: по типу аттача ищем метод с подходящим именем. Вот пример «качалки» для аудио:
def dl_audio(self, data): aid = data["aid"] owner = data["owner_id"] request = "{}_{}".format(owner, aid) (audio_data, json_stuff) = call_api("audio.getById", [("audios", request), ], self.args) try: data = audio_data[0] name = u"{artist} - {title}.mp3".format(**data) self.save_url(data["url"], name) except IndexError: # deleted :( logging.warning("Deleted track: {}".format(str(data))) return # store lyrics if any try: lid = data["lyrics_id"] except KeyError: return (lyrics_data, json_stuff) = call_api("audio.getLyrics", [("lyrics_id", lid), ], self.args) text = lyrics_data["text"].encode('utf-8') ...
К сожалению, изъятые по просьбе правообладателей аудиозаписи больше не доступны, для них возвращается пустой ответ.
А остальное?
TODO
Я не стал делать сохранение фотоальбомов, потому что у меня там ничего важного не хранится, да и код kilonet из его статьи неплохо работает. Еще не сохраняются видеозаписи и заметки, мне это показалось не сильно нужным.
На последок
Код далек от идеала и не отличается отсутствием костылей, но выполняет поставленную задачу. Надеюсь, кому-то пригодится моя поделка, для сохранения своих записей/документов/музыки, или для обучения.
UPD 18.12.2016
Юзер hiwent говорит, что с 16.12.2016 года vk закрыли возможность использовать API для работы с аудиозаписями. В связи с этим, функционал скрипта, предусмотренный для сохранения аудиозаписей, не работает. В связи с этим можно попробовать «прикинуться» родным приложением vk, апример андроид-версией, или kate mobile. Для них возможность работать с аудиозаписями никуда не пропадет, хотя может быть методы отличаются.
Как сделать репост ВКонтакте и что это такое?
Приветствуем, друзья!
Продолжаем разбираться в интерфейсе ВКонтакте. Сегодня вы узнаете, как сделать репост в ВК, его разновидности, чем он полезен и какие существуют тонкости.
Почему стоит разобраться – данный инструмент эффективен как для личного использования в соцсети, так и для ведения бизнес-страниц. Существуют правила, по которым совершается узаконенный сайтом копипаст.
Что такое репост?
Кратко обозначим для ясного понимания, что такое репост. Это функция, позволяющая сохранять выбранную запись к себе на стену, отправлять в сообщество или личным сообщением. В записи, которой вы поделились таким образом, будет указан первоисточник.
Далее разберемся, что означает само слово, пришедшее к нам из другого языка. К слову “пост”, как называют публикации ВКонтакте, добавляется английская приставка “re”, которая значит “воспроизведение”, “повтор”. То есть происходит повторение информации, грубо говоря, копипаст.
Это позволяет моментально делиться информацией и сохранять ее, тогда как обычное копирование – гораздо дольше. Например, когда необходимо сохранить красивую подборку фотографий или музыки, полезных учебных материалов или видео-роликов. Чтобы воспроизвести материал в таком же виде, понадобится отдельно загрузить картинки и добавить композиции, документы, видео.
Мы делаем проще – с помощью одного клика дублируем нужную публикацию и сохраняем.
Немаловажно, с точки зрения авторства и банальной вежливости, этичнее сделать репост, чем “содрать” информацию с чужой записи.
Как сделать репост записи?
Нажмите на кнопку в виде стрелки, которая показана на скриншоте ниже. При наведении на нее курсором появляется надпись “Поделиться».
Далее вы попадаете в меню с тремя вариантами.
На стену страницы
Чтобы репостнуть на страницу, выделяйте первый пункт – “Друзья и подписчики”. Информация сохранится на стене личной страницы и отобразится в ленте у друзей и подписчиков.
В группу/сообщество
Для копипаста в группу, выбирайте второй пункт – “Подписчики сообщества”. Развернется список, куда можно дублировать выбранный пост. После этого его можно закрепить в шапке, как обычную публикацию.
Репост от имени группы
Для такого вида репоста нужно обязательно обладать правами администратора. Важное замечание: репостнуть получится только от имени группы. Нельзя сделать так, чтобы ваше имя упоминалось в публикации.
Если данный нюанс важен, то сделайте соответствующий комментарий к записи.
Личным сообщением
Отправляя публикацию личным сообщением, вы отправите ее напрямую в диалог с выбранным человеком. При выделении нескольких людей, со всеми участниками будет создана отдельная беседа.
С комментарием
Функционал ВКонтакте позволяет сделать репост с текстом – добавить комментарий или приписку от своего лица. Обратите внимание на специальное поле после меню выбора вариантов.
Вместе с комментарием можно добавить фотографию, аудио или документ. Однако прикрепить получится только один файл.
Отложенный перепост
Совершается по тому же принципу, как и отложенный пост. Проделываем обычные шаги: нажимаем на стрелочку “Поделиться” и выбираем, куда отправить.
Далее во вкладке “Еще” на нижней панели инструментов выбираем значок часов с подписью “Таймер”.
В открывшемся меню выбираем дату и время публикации.
С помощью телефона
Этапы того, как сделать репост с телефона такие же, как на сайте. Если открываете браузер в мобильной версии – алгоритм тот же.
Нажимаете на значок стрелки под постом, выбираете в меню, куда отправить информацию. Выпадает поле для комментария и прикрепления файлов. Когда все готово, нажимаете “Отправить” – публикация готова.
Частые вопросы
Почему из группы ВКонтакте нельзя сделать репост?
Возможны две причины.
- Выбранная публикация сделана не от имени группы, а отдельным участником на его стене. Перепостить можно те записи, которые были опубликованы напрямую от имени сообщества.
- Сделать репост на стену не получится из закрытых и частных групп, это нарушение правил конфиденциальности. Однако поделиться записью в личном сообщении – можно.
Как посмотреть, кто сделал репост?
Наведите курсор на стрелочку и подождите пару секунд. Появится окно с короткими данными о количестве репостов и списком людей. Чтобы развернуть всю информацию, нужно нажать на надпись “Поделилось … человек”. При этом, если записью поделились ваши друзья, именно их имена вы увидите первыми в коротком списке-превью.
Сколько репостов можно делать в день?
Согласно правилам сайта, в день можно поделиться чужими записями до 150 раз (после исчерпания лимита функция становится доступной ровно через 24 часа).
Но если перепост будет идти с пулеметной скоростью, ВКонтакте забанит вас намного раньше этой цифры.
Делайте интервалы в 1 – 2 минуты, иначе система зафиксирует спам.
Заключение
Функция репостинга – простая в обращении и крайне полезная. Например, ее активно используют для конкурсов. Сообщества и паблики призывают поставить лайк и сохранить запись на стену, чтобы участвовать в розыгрыше. Из репостнувших выбирают победителя и дарят подарки.
Заработок на репостах – тоже явление нередкое, об этом мы рассказывали в отдельной статье. Заглядывайте, кого интересует, как делать перепосты за деньги.
Отметим, что данный способ отвечает политике об авторском праве – безусловный плюс. Минус – множество страниц и пабликов во ВК напоминает банальное копирование друг друга. Злоупотребление копипастом обостряет необходимость в авторском контенте.
Среди переполненных репостами страниц внимание цепляется за оригинальные записи, личные мысли и свежий взгляд. Пользуясь чудесной функцией ВК, не забывайте, что все хорошо в меру.
Удачи и процветания!
дизайнов логотипов ВКонтакте, тем, шаблонов и графических элементов, загружаемых на Dribbble
-
Посмотреть ВК СПОРТ
ВК СПОРТ
-
Посмотреть Вк Спорт
Вк Спорт
-
Посмотреть MailDesign → Команда дизайнеров ВКонтакте
MailDesign → VK Design Team
-
Посмотреть цифровое сопротивление
Цифровое сопротивление
-
Посмотреть логотип монограммы ВКонтакте
Логотип с монограммой ВКонтакте
-
Посмотреть логотип Vk doodles
Логотип Vk doodles
-
Просмотр записи подкастов
Запись подкастов
-
Просмотр 3D-персонажей — 03/01
3D-персонажи — 03.
01
-
Посмотреть сервисы ВК
ВКонтакте Сервисы
-
Просмотр 3D-персонажей — 03/03
3D-персонажи — 03/03
-
Посмотреть мультипликационную анимацию пользовательского интерфейса
Мультипликационный пользовательский интерфейс
-
Посмотреть логотип vitkam (v+k)
логотип vitkam (v+k)
-
Просмотр ВКонтакте — Экран поста на стене
ВКонтакте — Экран поста на стене
-
Посмотреть иллюстрации для лендинга ВКонтакте
Иллюстрации для лендинга ВКонтакте
-
Посмотреть анимированный рисунок Vk doodle
Анимированный рисунок Vk doodle
-
Просмотр 3D-персонажей — 03/02
3D-персонажи — 03.
02.
-
Посмотреть логотипы ВК
Логотипы ВКонтакте
-
Посмотреть набор стикеров для ВКонтакте
Набор наклеек для ВКонтакте
-
Посмотреть сообщество администраторов
Сообщество администраторов
-
Посмотреть патч ВКонтакте
Нашивка ВКонтакте
-
Посмотреть логотип мобильного бренда ВКонтакте
Логотип мобильного бренда ВКонтакте
-
Посмотреть иллюстрации для ВК
Иллюстрации для ВК
-
Посмотреть ВК
-
Посмотреть посадку VK Fellowship
Посадка ВКонтакте
Зарегистрируйтесь, чтобы продолжить или войдите
Загрузка еще…
Как сохранить стену Facebook | Small Business
Лори Свенсон
Сохранение на стене Facebook поможет вам сохранить записи ваших социальных или деловых взаимодействий. Вы можете сохранить коллекцию поздравлений с днем рождения, постов, посвященных торжественному открытию, или визуальное напоминание о дне, когда вы подобрали тысячного поклонника. Вам также может понадобиться сохранить свою стену Facebook по более серьезным причинам. Например, вы можете сохранить пренебрежительные замечания о вашем бизнесе или продукте со своей или чужой стены в качестве доказательства для возможного судебного иска.
Сохранить вручную
-
Перейдите на Facebook и перейдите на свою стену или стену, которую хотите сохранить. Перейдите в нижнюю часть страницы и нажмите «Старые сообщения» столько раз, сколько необходимо, чтобы отобразить весь контент, который вы хотите сохранить.
-
Нажмите «Файл» в верхнем меню и выберите «Сохранить страницу как» в контекстном меню. Назовите страницу как хотите. В раскрывающемся меню «Тип файла» под именем файла выберите «Веб-страница, полная», если этот параметр еще не выбран.
-
Нажмите кнопку «Сохранить», чтобы сохранить страницу в нужную папку на жестком диске.
Страница будет сохранена как отдельный файл с подпапкой, содержащей нетекстовые элементы, такие как фотографии и графика. Эта вложенная папка должна оставаться нетронутой, чтобы вы могли просматривать страницу в том виде, в котором она появилась на Facebook.
Тщательное сохранение Facebook
-
Создайте резервную копию данных Facebook, чтобы сохранить всю стену. Войти в Facebook. Нажмите стрелку в правом верхнем углу страницы рядом с кнопкой «Домой» и прокрутите вниз до «Настройки учетной записи». Нажмите «Загрузить копию ваших данных Facebook». Затем нажмите «Начать мой архив».
-
Когда ваши данные будут готовы к архивированию, вы получите электронное письмо. Это может занять 30 минут или целый день, в зависимости от того, сколько данных содержит ваша учетная запись.
-
Откройте электронное письмо от Facebook, когда оно придет, и щелкните ссылку для скачивания, встроенную в сообщение. Выберите «Сохранить файл» в открывшемся меню и выберите папку назначения для вашей истории Facebook.