Създаване на дъмп на снимки от диалог
Описание на процеса на разработване на скрипт, който върши работа, която програмистът се срамува да върши ръчно
Експериментална функция:
Моля, имайте предвид, че текстът на връзката и тук може да не съвпадат.
Вчера трябваше да изтегля всички снимки от разговор с един човек във vk.com. Имаше повече от 1000 снимки. Ясно е, че правенето на всичко това с химикалки би било уморително и ... Жалко. Не програмирам, за да
работата не се извършва автоматично. Затова беше решено да се напише сценарий.
За език е избран Python. Удобно е да го използвате за конзолата, доста е бързо, има urllib модул, който ви позволява да изтегляте снимки от връзка наведнъж. Но основната причина е, че започнах да го изучавам наскоро. Реших да свърша допълнителна работа.
. Заявката съдържа параметри:
Като изпълним такава заявка, ще получим в отговор нещо подобно:
Тук замених линковете с , тъй като вече казах, че vk снимките са обществено достояние и всеки, който знае линка, може да ги получи.
От всичко това ни интересуват само линковете, които са вътре, както и json накрая. Не бях съвсем честен, когато казах, че една POST заявка приема 4 параметъра. По-точно, приема, но ако го изпълним, ще получим само първите няколко снимки. Тъй като vk.com има зареждане на съдържание при превъртане на страницата, има параметър за отместване, който отговаря за това коя част от целия набор от снимки зареждаме. В резултат на това параметрите на заявката изглеждат така:
От всички параметри само отместването ще се промени. Изваждаме го от същия json в края на отговора. Всеки път, когато се направи заявка, отместването в json ще се увеличи,показва каква "смяна" трябва да се направи следващия път. По този начин ще трябва да правим заявки, докато нашето отместване стане по-малко от броя.
Между другото, какво ще кажете за изпълнението на заявка? Как можем да получим достъп до нашата страница? Установено е, че страницата може да бъде достъпна от някой, който има бисквитка, наречена remixsid. Така че трябва да заменим тази бисквитка във функцията, която изпълнява заявката и всичко ще се получи. Безопасно? Не наистина, хвърлянето на бисквитки не е добре, но не намерих друга опция. Ако някой знае, моля да пише.
Общият алгоритъм изглежда ясен: направете заявка, извадете връзки, запишете ги във файл, проверете-
Аргументите ще бъдат предадени през терминала (remixsid, dialog_id и име на папка):
Нека създадем отделна папка за снимки:
Добре, нека започнем да изпълняваме заявки:
Сега започваме да анализираме отговора. Извличаме всичко чрез регулярни изрази. Първо извличаме json и задаваме следното отместване:
Сега трябва да извлечем всички връзки от src таговете. Ние действаме по същия начин, но използваме метода findall, който връща масив от всички низове, които съответстват на регулярния израз:
Сега нека запишем всичко във файл:
И за нашия случай:
Готов! Но тъй като ще използваме това от командния ред, нека напишем и малко документация (--help), както и изход за грешка, ако има по-малко аргументи на командния ред от необходимото. Нека добавим към началото: