Как скачать все фото из диалогов вк?
Для скачивания фотографий надо открыть переписку во ВКонтакте и в меню выбрать пункт «Показать вложения». После этого нажимаем на иконку расширения SaveForm, выбираем пункт « скачать фотографии » и соглашаемся на загрузку. Все фото будут загружены в папку по умолчанию — в каталог «Диалоги
Как скачать все фото из ВК?
Можно это сделать через Яндекс. Диск: зайдите в раздел Фото -> Фото из соцсетей и предоставьте доступ к своей страничке ВК . Фотографии загрузятся на ваш Яндекс. Диск, при этом для каждого фотоальбома будет создана отдельная папка с соответствующим названием.
Как сохранить все фото из вк на компьютер?
- Открываем желаемую фотографию.
- Внизу справа есть всплывающее меню «Ещё». .
- Оригинал (самое лучшее качество!) .
- Правой кнопкой мышки нажимаете на изображение. .
- Появится окно с выбором места(папки) на компьютере , в которое будет сохранена фотография. .
- Теперь можно свернуть окно браузера.
Как перенести фото из вк в телефон?
Чтобы сохранить фото из приложения « ВКонтакте », используй стандартный набор команд. Просто кликни нужное изображение, нажми «Скачать» , и фотография автоматически сохранится в памяти твоего телефона . Такой способ подходит как для смартфонов на базе андроид, так и для айфонов.
Как посмотреть вложения ВК с начала?
- Перейти на вкладку «Сообщения» с главной страницы ВКонтакте.
- Открыть подходящую переписку.
- Нажать на адресную строку и в конец добавить набор символов &msgid=1.
- Осталось лишь нажать на Enter и весь диалог откроется с первого сообщения.
Как скачать альбом с фото с ВК на компьютер?
- После скачивания и установки зайти на сайт “ Вконтакте ”, перейти к разделу “ Фотографии ”.
- Выбрать нужные изображения. .
- Вверху нужно найти кнопку “ Скачать альбом ”.
- Запустится процесс формирования списка фотографий. .
- После построения списка кликнуть “Продолжить”.
Можно ли из ВК скачать альбом с фото?
Вставьте в сервис ссылку на альбом , на страницу человека, на группу или выберите из списка. Подгрузятся доступные для скачивания альбомы . Отметьте нужные галочкой и нажмите на кнопку « Скачать N фото одним архивом». При регистрации дается 10 бесплатных кредитов, этого хватит на 1000 фотографий .
Как скачать фото с ВК в галерею?
Чтобы сохранить фото из приложения «ВКонтакте», используй стандартный набор команд. Просто кликни нужное изображение, нажми « Скачать » , и фотография автоматически сохранится в памяти твоего телефона. Такой способ подходит как для смартфонов на базе андроид, так и для айфоно
Как скачать все фото из диалога в ВК?
Для этого необходимо лишь перейти на страницу нужного диалога в VK и нажать на иконку расширения в верхнем правом углу. При первом использовании VK запросит авторизацию приложения. В новой вкладке будут показаны недавние фотографии , которые можно выбрать для скачивания
Как скачать весь альбом в ВК?
Вставьте в сервис ссылку на альбом , на страницу человека, на группу или выберите из списка. Подгрузятся доступные для скачивания альбомы . Отметьте нужные галочкой и нажмите на кнопку « Скачать N фото одним архивом». При регистрации дается 10 бесплатных кредитов, этого хватит на 1000 фотографий.
Как скачать фотоальбом из ВКонтакте?
Вставьте в сервис ссылку на альбом , на страницу человека, на группу или выберите из списка. Подгрузятся доступные для скачивания альбомы. Отметьте нужные галочкой и нажмите на кнопку « Скачать N фото одним архивом».
Как добавить фото в мобильной версии ВКонтакте?
Сначала запускаем браузер и переходим по адресу m. vk .com. Авторизуемся на своей странице, введя логин и пароль от нее. Попав на свою страничку, жмем по полю в верхней части экрана, в котором написано «Что у вас нового?». Откроется окно подготовки публикации, в котором нам нужно нажать кнопку с иконкой фотоаппарата.
Как добавить Сохранёнки в ВК с галереи?
- Заходим в группу, фотографии в которую необходимо загрузить;
- Далее жмем на кнопку «Фотоальбомы», расположенную в правой части страницы;
- Открывается список всех альбомом. .
- В правом верхнем углу открывшейся страницы есть кнопка « Добавить фотографии».
Как перенести фото из одного альбома в другой?
Как переместить фотографии из одного альбома в другой
Нажмите кнопку «Переместить фотографии »: она расположена под названием альбома . Кликом мыши выделите те изображения, которые хотите переместить: у них появятся рамки желтого цвета. Затем укажите альбом , в который вы хотите перенести выбранные фотографии .
Как узнать сколько вложений в диалоге в ВК?
- В адресной строке браузера на компьютере дописать к адресу vk .com букву “m”, как на скриншоте:
- Перейти в “Сообщения”, открыть диалог , в котором нужно подсчитать количество сообщений.
- Нажать на стрелку справа, она переместит к последнему сообщению в диалоге .
Как в ВК открыть переписку с самого начала?
Находясь в диалоге ВК , зажимаем (не крутим, а именно зажимаем) колесико мыши. В результате появится иконка с изображением всенаправленного указателя, которая и позволит нам отмотать и перейти куда нужно.
Как скачать фото из переписки вконтакте?
Для скачивания фотографий надо открыть переписку во ВКонтакте и в меню выбрать пункт «Показать вложения». После этого нажимаем на иконку расширения SaveForm, выбираем пункт « скачать фотографии » и соглашаемся на загрузку. Все фото будут загружены в папку по умолчанию — в каталог «Диалоги».
Делаем дамп фотографий из диалога vk.com
Вчера мне понадобилось скачать все фотографии из диалога с одним человеком в vk.com. Фотографий было больше 1000 штук. Понятное дело, что ручками это все делать было бы утомительно и… Стыдно. Не для того программированием занимаюсь, чтобы такую грязную работу делать не автоматизированно. Поэтому было решено написать скрипт.
В качестве языка был выбран Python. Его удобно использовать для консоли, он довольно быстрый, есть модуль urllib, позволяющий «одним движением» скачивать картинки по ссылке. Но главная причина — это то, что я начал изучать его недавно. Решил дополнительно попрактиковаться.
Сам скрипт получился небольшой, но было бы интересно описать процесс создания. Буду стараться писать побольше комментариев в коде, чтобы те, кто не знает python, тоже смогли понять процесс. А от знатоков очень приветствуются советы и указания. Итак, приступим.
«Вконтакте» не предоставляет API конкретно для скачивания материалов из беседы, поэтому самое долгое время заняло изучение того, как устроена система подгрузки картинок из диалога в vk.com. Все картинки лежат у них, понятное дело, на сервере, и доступ к ним имеет любой, у кого есть ссылка на эту картинку. Таким образом, чтобы скачать все фотографии из диалога, нам надо получить все ссылки на картинки. Тыкаясь туда-сюда, было выяснено, что при нажатии на «Действия -> показать материалы из беседы» отправляется POST запрос на vk.com/wkview.php. Запрос содержит параметры:
- act:show
- al:1
- loc:im
- w:history_photo
16515wkview.js,wkview.css,page.js,page.css,page_help.css065900
_photo»,»canEdit»:false,»lang»:[]>WkView.historyInit();
Здесь я заменил ссылки на , так как уже говорил, что картинки vk лежат в открытом доступе и получить их может любой, кто знает ссылку.
Из всего этого нам интересны только ссылки, которые находятся внутри , а так же json на конце. Я был не до конца честен, говоря, что POST запрос принимает 4 параметра. Точнее, он принимает, но если его выполнить нам выдадутся только первые несколько фотографий. Так как vk.com имеет подгрузку контента по мере прокручивания страницы, то существует параметр offset, который отвечает за то, какую часть из всего множества фотографий нам подгрузить. В итоге параметры запроса выглядят вот так:
- act:show
- al:1
- loc:im
- w:history_photo
- offset: offset
- part: 1
Кстати, а что насчет выполнения запросов? Как нам получить доступ к своей странице? Было выяснено, что доступ к странице может получить тот, у кого есть cookie под названием remixsid. Таким образом нам надо подставить эту куку в функцию, которая выполняет запрос и все получится. Безопасно? Не совсем, швыряться куками — это не есть хорошо, но я не нашел другого варианта. Если кто-то знает, напишите пожалуйста.
Общий алгоритм вроде понятен: сделать запрос, вытащить ссылки, записать их в файл, проверить-
новый offset>count?-, если нет, то присвоить offset новое значение и выполнить запрос с ним, если да, то выйти из цикла. Затем пройтись по всем ссылкам в файле и скачать картинки лежащие по их адресу. Начинаем писать код.
# coding=utf-8 import requests # для выполнения запросов import re # для парсинга по регулярным выражениям import sys # для обработки аргументов командной строки import os # для создания папок с фотографиями import urllib # для скачивания картинок import json # для обработки json # argv[1] = remixsid_cookie # argv[2] = dialog_id # argv[3] = person_name
Аргументы у нас будут передаваться через терминал (remixsid, dialog_id и название папки):
remixsid_cookie = sys.argv[1] # Словарь запроса RequestData = < "act": "show", "al": 1, "loc":"im", "w": "history" + sys.argv[2] + "_photo", "offset" : 0, "part" : 1 >request_href = "http://vk.com/wkview.php" # Установим первоначальные offset и count. Count изменится при первом запросе bound =
Создадим отдельную папку для фотографий:
try: os.mkdir("drop_" + sys.argv[3]) # Пытаемся создать папку except OSError: print "Проблемы с созданием папки 'drop_" + sys.argv[3] + "'" if( os.path.exists("drop_" + sys.argv[3]) ): os.chdir("drop_" + sys.argv[3]) # Переходим в эту папку else: print "Не удалось создать папку\n" exit()
Отлично, начинаем выполнение запросов:
test = open("links", "w") while( bound['offset'] < bound['count'] ): RequestData['offset'] = bound['offset'] content = requests.post(request_href, cookies=, params=RequestData).text # Этой командой мы выполняем post запрос с параметрами params и передавая куки. .text возвращает ответ запроса в виде текста. Все просто.
Теперь начинаем парсинг ответа. Извлекаем все через регулярные выражения. Сначала извлекаем json и устанавливаем следующий offset:
#ищем первое совпадение по регулярному выражению json_data_offset = re.compile('\').search(content) # .search возвращает специальный объект. У него есть метод span(), который возвращает кортеж с индексами начала и конца найденной подстроки bound = json.loads(content[json_data_offset.span()[0]:json_data_offset.span()[1]]) # декодируем json bound['count'] = int(bound['count']) #count отдается в виде строки bound['offset'] = int(bound['offset']) # на случай, если в будущем тоже будет отдаваться в виде строки. В принципе это написано ради "на всякий случай"
Теперь надо извлечь все ссылки из тегов src. Действуем тем же способом, но используем метод findall, который возвращает массив всех строк, которые совпали с регуляркой:
links = re.compile('src="http://.+?"').findall(content)
Теперь запишем все в файл:
for st in links: test.write(st[5:len(st)-1] + '\n') # пишем то, что внутри src="https://habr.com/ru/articles/244647/" test.close()
С этим все. Осталось только пройтись по файлу и скачать все по ссылкам. Это делается с помощью модуля urllib, вот так:
urllib.urlretrieve(ссылка, имя файла)
А для нашего случая:
test = open("links", "r") file_num = 0 for href in test: # берем строку из файла которая является ссылкой, и так до конца файла urllib.urlretrieve(href, str(file_num)) # в качестве имени файла просто используем его порядковый номер file_num += 1 print "Скачано " + str(file_num) + " файлов\n" test.close()
Готово! Но, так как использовать это мы будем из командной строки, давайте еще напишем небольшую документацию (--help), а так же вывод об ошибке, если аргументов командной строки меньше, чем нужно. Добавим в начало:
if( sys.argv[1] == '--help' ): print """ Usage: python main.py is a string parameter "sel" in address line which you see when open a dialog """ exit() else: if( len(sys.argv) < 4 ): print """ Invalid number of arguments. Use parameter --help to know more """ exit()
Вот и все, вроде. Конечно, можно еще многое добавить: проверку на выполнен запрос или нет, проверку на корректность входящих данных, автоматическое вытаскивание (например, первых 10), но мне просто хотелось описать основные моменты. В итоге те самые 1000 фотографий, которые мне были нужны, были скачаны. Заняло это где-то 2 минуты. Никаких ограничений на запросы, как так понял, vk.com не ставит, хотя могу предположить, что на такой маленький для него трафик он даже не реагирует.
Весь рабочий код целиком лежит на Гитхабе.
- python
- социальные сети
- регулярные выражения
- парсинг
- Python
- Программирование
Как скачать все фотографии собеседника из переписки VK?
Собственно, сабж. Имеется переписка на несколько тысяч сообщений, необходимо выдернуть из неё все фотографии собеседника в полный размер. Как это проще всего реализовать? Эту статью на Хабре видел, но что-то или лыжи не едут, или я не такой
- Вопрос задан более трёх лет назад
- 32017 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1
готовых решений не встречал
можно сделать через вк апи, основная работа через метод https://vk.com/dev/messages.getHistory
есть хороший опыт с вк, могу посодействовать за небольшую плату - на выходе будет php скрипт способный выкачать все картинки
Выкачиваем фотографии из каждого диалога ВК средствами API
Иногда бывает полезно выгрузить все фотографии из диалога ВКонтакте, руками это не сделать не просто, поэтому обратимся к API.
В документации присутствует метод messages.getHistoryAttachments — он нам и нужен. Возвращать он может не только фотографии, но и другого рода документы: аудио, видео и т.д. Но в этом примере будем рассматривать только фотографии.
Передавать в метод будем 4 параметра:
peer_id — собственно, ID юзера из диалога с которым нужно получить фотографии
media_type — тип необходимого документа, будем передавать photo
count — количество фотографий, которые будут возвращены. Мы хотим выкачать все, поэтому будет брать по максимуму — 200
start_from — это смещение, с помощью которого мы сможем получить все имеющиеся в диалоге фотографии
Нам требуется загрузить фотографии из всех диалогов, поэтому воспользуемся еще одним методом для получения списка всех диалогов — messages.getDialogs. Получив списки диалогов, мы получим идентификаторы юзеров, которые в последующем сможем передавать в метод для получения фотографий.
И, конечно же, не обойтись без библиотеки для работы с API вконтакте, которая умеет выполнять нужные функции. Я воспользуюсь своей — golang-vk-api
Диалогов, также как и фотографий. нельзя получить больше 200, поэтому напишем функцию для получения всех диалогов, где будем использовать смещение:
func getDialogs(client *vkapi.VKClient) ([]*vkapi.DialogMessage, error) < offset := 0 params := url.Values<>messages := []*vkapi.DialogMessage<> for < params.Set("offset", strconv.Itoa(offset)) dialogs, err := client.GetDialogs(200, params) if err != nil < return nil, err >if len(dialogs.Messages) > 0 < for _, msg := range dialogs.Messages < messages = append(messages, msg.Message) >> offset += 200 if len(messages) >= dialogs.Count < break >> return messages, nil >
После того, как получили все диалоги, можно получить непосредственно сами фотографии, используя метод, упомянутый в самом начале:
func getAttachments(client *vkapi.VKClient, UID int) ([]*vkapi.PhotoAttachment, error) < attachments := []*vkapi.PhotoAttachment<>params := url.Values<> for < att, err := client.GetHistoryAttachments(UID, "photo", 200, params) if err != nil < return nil, err >if len(att.Attachments) == 0 < break >for _, photo := range att.Attachments < attachments = append(attachments, photo.Attachment.Photo) >params.Set("start_from", att.NextFrom) > return attachments, nil >
Прежде чем преступить к загрузке всех фотографий, напишем пару необходимых методов:
Проверка существования папки
func folderExists(name string) bool < if _, err := os.Stat(name); err != nil < if os.IsNotExist(err) < return false >> return true >
func mkdir(name string) bool < err := os.MkdirAll(name, 0755) if err != nil < return false >return true >
Получение имени, с которым будет сохраняться файл, из ссылки
func getFileName(url string) string < idx := strings.LastIndex(url, "/") return url[idx+1:] >
У фотографии не всегда доступны все размеры, поэтому напишем метод для выборки наибольшего размера
func getBestLink(photo *vkapi.PhotoAttachment) string < if photo.Photo2560 != "" < return photo.Photo2560 >else if photo.Photo1280 != "" < return photo.Photo1280 >return photo.Photo604 >
func downloadFile(url string, name string) error < file, err := os.Create(name) if err != nil < return err >defer file.Close() resp, err := http.Get(url) if err != nil < return err >defer resp.Body.Close() _, err = io.Copy(file, resp.Body) if err != nil < return err >return nil >
В основной функции получаем все диалоги, для каждого диалога получаем все фотографии и загружаем по 10 штук одновременно в отдельную для юзера папку
dialogs, err := getDialogs(client) if err != nil < log.Printf("failed to get dialogs: %s\n", err) return >curUser := 0 for _, d := range dialogs < photos, err := getAttachments(client, d.UID) if err != nil < log.Printf("failed to get attachments for UID %d\n", d.UID) continue >if len(photos) == 0 < continue >downloadPath := "photos/" + strconv.Itoa(d.UID) mkdir(downloadPath) curUser++ downloaded := 0 gocounter := 0 limit := 10 queue := len(photos) total := len(photos) totalUsers := len(dialogs) var wg sync.WaitGroup for _, p := range photos < link := getBestLink(p) path := downloadPath + "/" + getFileName(link) wg.Add(1) go func() < err := downloadFile(link, path) if err != nil < log.Printf("failed to download file: %s\n", err) >wg.Done() queue-- downloaded++ log.Printf("downloaded %d/%d photos. user %d/%d\n", downloaded, total, curUser, totalUsers) >() if queue < limit < limit = queue >gocounter++ if gocounter == limit < wg.Wait() gocounter = 0 >> >