Правка заливщика фото на facebook, или что общего с парсингом


Некоторые работы, которыми мне приходится заниматься, выглядят очень разными, но на самом деле имеют много общего. Вот, например, парсинг товаров с интернет-магазина и заливка фото на фейсбук – казалось, бы, что общего? А на самом деле принцип один и тот же.

Вот один из последних моих заказчиков озадачил меня работой: починить готовую программку на си шарп, которая авторизуется в нескольких популярных соцсетях и заливает сразу много фото (из выбранной папки) в альбомы. Что же здесь общего с парсингом? А вот что – все основано на запросах.

Итак, начинаем препарировать программу. Работа начинается с подключения библиотеки xNet – не самое новое решение, но до сих пор отлично работающее, так как по сути дела за последние годы ничего нового в пост и гет запросах не изменилось. Те же параметры, те же куки, те же юзер агенты.

Вернемся к нашей программе. Авторизоваться в фейсбуке проще всего с мобильной версией. Формируем запрос с куками, неким юзер-агентом и не забываем про кодировку:

var request = new HttpRequest();
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0";
request.CharacterSet = Encoding.GetEncoding(1251);
request.Cookies = new CookieDictionary();
Отправляем этот запрос к мобильной версии сайта и сразу же ответ переводим в строку:

string get = request.Get("https://m.facebook.com/").ToString();
Кстати, работать с мобильными версиями соцсетей гораздо проще, именно поэтому и используем такой адрес. Затем получаем три ключа:

string li = SearchAndInput(get, "li\" value=\"", "\"")[0];
string lsd = SearchAndInput(get, "lsd\" value=\"", "\"")[0];
string m_ts = SearchAndInput(get, "m_ts\" value=\"", "\"")[0];
Которые парсим особым методом SearchAndInput(). Также мы парсим и страничку, чтобы получить эти три ключа. Дальнейшая программа вся основана на использовании этого метода с отправкой пост и гет запросов. Исходники я приводить не буду – все же не моя разработка, да и жалко выкладывать в паблик. Ничего сложного там нет, но есть много моментов, которые сократят время разработчикам под фейсбук, если их знать.

А почему же не работала отправка фото через приложение? Все просто, с помощью try catch находим строчку, которая выбрасывает ошибку, это оказывается строка:

string revision = SearchAndInput(get, "\"revision\":", ",")[0];
Здесь мы находим ключ revision. Почему же она выбрасывает исключение? Смотрим исходный код страницы и ищем там revision:



Обратите внимание, что нет revision в кавычках, но есть server_revision. Меняем строку на такую:

string revision = SearchAndInput(get, "\"server_revision\":", ",")[0];
И ура, все работает! Фотографии заливаются пакетно, ошибок нет.



Итак, если вам необходимо разработать или починить приложение для социальной сети, то вы всегда можете написать мне. Пожизненной гарантии на готовое приложение вам никто не даст – фейсбук нередко меняется. Но все доработки будут стоить уже горазд дешевле первоначальной программы.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си шарп, facebook, личное, парсинг




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Мужик и медведь
Урок 20. Простые функции манипуляции строками в C#
Как сканеры находят уязвимости