Собираем информацию с новостей

В самом начале статьи, немного рассмотрим новые настройки программы. По крайней мере одна из них, является скажем так серьёзной настройкой и на ней мы остановимся поподробнее.
Запускаем программу, нажимаем кнопку SET (Настройки) и смотрим на фотографию:
Имеется ввиду чекбокс: Запись zero_response в файл errors.txt
Немного предыстории. Когда программа собирает лайки, которых на объектах не очень много, допустим до десяти штук или до двадцати, получается слишком большая скорость запросов, от десяти в секунду и выше. И при такой скорости сайт ВКонтакте, может выдать пустой ответ. Что подразумевается под пустым ответом, смотрим:
{"response":{"count":0,"items":[]}}
Здесь так же ещё нужно добавить, что наша программа написана так, что лайки она собирает только с тех объектов, в которых лайки есть. Так как программа скачивая информацию допустим за новости, проверяет каждую новость на присутствие лайков и если новость имеет лайки, то тогда идентификатор этой новости добавляется в список и сохраняется в определённый файл news_with_likes в папке log, что бы потом в последствии эти лайки собирать.
Так же это касается и всех остальных объектов: фотографий, видео, комментариев и так далее. То есть при написании кода, делался упор на то, что бы по возможности в пустую запросов не делалось, а запросы делались только тогда, когда действительно известно, что там есть что взять.

Может быть конечно и такой случай, когда пользователь или сразу несколько пользователей убрали свои лайки и новость или любой другой объект остался без лайков. Тогда конечно в таком случае, ответ должен прийти пустой.
Но всё дело в том что сайт ВКонтакте может выдать пустой ответ именно тогда, когда лайки никто не убирает. И если тот же самый запрос, на который пришёл пустой ответ повторить несколько раз, то где-то примерно на третий, четвёртый и так далее раз, всё таки приходит ответ с нужной нам информацией.

Значит проблема ясная, теперь немного о решении.
В программу добавлена глобальная переменная zero_response, которая по умолчанию равна ноль. И как только сайт ВКонтакте присылает пустой ответ, переменная zero_response становится больше на единицу. После этого возвращаемся в начало функции resHtml, делаем тот же самый запрос, с тем же самым URL. И так до тех пор, пока или не прийдёт нужный нам ответ или переменная zero_response не будет равна одинадцати.
Если нужный нам ответ не приходит, а zero_response уже равна 11 (одинадцать), то тогда программа пропускает этот URL и берёт следующий, с другими заданными параметрами. То есть цифра 11 (одинадцать), является своеобразной подушкой безопасности для этой проблемы с пустыми ответами.
И естественно всё это будет записываться в логи, а именно в файл ERRORS.TXT который будет находится в корне программы. Туда будут скидываться запросы и пустые ответы, которых будет или 11 (одинадцать) штук или меньше и тогда в конце будет ответ с сайта ВКонтакте с нужной нам информацией.
Туда дальше этот код скорей всего немного усовершенствуем, посмотрим как его можно сделать лучше. Ну а пока что цифры 11 (одинадцать) достаточно для того что бы получить нужный нам ответ. Её можно увеличить в самих исходниках и наверное в следующий раз пропишем её в настройках, что бы при надобности можно было её изменить в файле Settings. Уменьшать лучше не надо, а вот увеличить, как говорится на всякий случай.
Чекбокс: Запись zero_response в файл errors.txt просто отключает или включает ведение логов. Сам же код, который решает эту проблему никак не отключишь, он будет действовать постоянно, потому что без него программа может выдавать нам не точную информацию.

Практически всё это касается программы написанной на Visual Studio на языке C Sharp, потому что у неё частота запросов слишком большая. В программе же которая написана на Devel Studio на языке PHP эта проблема практически отсутствует. По крайне мере не было замечено, хотя может быть и пропустили. Но опять же как говорится на всякий случай, в ней тоже прописан точно такой же механизм решения этой проблемы.

Программы
infgo.ru