Масовий запис із камер на виборах
Для початку виявимо дані про всі існуючі камери. Мені здався особливо простим подальший метод: почнемо пошук за номером ділянки, з 1 до 3800. Для цього відправимо GETvybory.mos.ru/json/id_search/aaa /bbb.json, деbbbце uid, аaaaце len(bbb ). Скажімо,vybory.mos.ru/json/id_search/1/3.json
Отримаємо json з інформацією про цю ділянку, щось начебто ось цього:
Спеціальний інтерес тут>
У результаті отримаємо необхідну інформацію про камери нинішньої ділянки: 2e9dd8dc-edd4-11e2-9a6b-f0def1c0f84c 188.254.112.2 188.254.112.3 188.249-12-12 6b-f0def1c0f84c 188.254.112.2 188.254.112.3 188.254 .112.4
Далі починаються нюанси. Існує три типи камер: старі, нові та відсутні. Чим вони відрізняються я розповім трохи пізніше, спочатку розберемося, як їх розрізняти, а розрізняти їх дуже легко - необхідно відправити GET виду http://SERVER /master.m3u8?c > Нова камера поверне дещо ніби
#EXTM3U #EXT-X-VERSION:2 #EXT-X-STREAM-INF:PROGRAM- > /variant.m3u8?c >
Стара камера поверне щось таке:
#EXTM3U #EXT-X-MEDIA-SEQUENCE:136 #EXT-X-TARGETDURATION:15 #EXT-X-ALLOW-CACHE:NO #EXT-X-PROGRAM-DATE -TIME:2013-09-04T12:05:40Z #EXTINF:15, /segment.ts?c > #EXTINF:15, /segment.ts?c > #EXTINF:15, /segment.ts?c > #EXTINF:15, /segment.ts?c >
Відсутня камера не поверне нічого, крім404 C/
Тепер, коли ми вміємо отримувати інформацію про камери певної ділянки, напишемо багатопотокову парсилку, яка збере нам всю необхідну інформацію. Я вибираю складати дані в безкоштовний монголаб, але цілком можнаобійтись і звичайним shelve. Знаючи, що ділянок у Москві 3500, пробіжимося циклом від 1 до 3800. Нижче накиданий на коліні, але тим не менш, працюючий код. У ньому, очевидно, потрібно вписати своє печіно і паролі від сервера монги.
Зараз у нас є повністю зібрана база камер. На момент написання статті старих камер було 544, з ними, на жаль, вдасться працювати тільки по-старому. Але зараз у нас є і 5778 нових камер, і вони мають одну специфіку. Чанки зі старих камер через дуже короткий час протухають - потрібно постійно скачувати новий плейлист, видирати звідти лінки на чанки і качати їх, поки не протухли. Нові камери позбавлені цього недоліку. Дозволено качати чанки довільних розмірів за довільний період часу, відправивши GET виду http://SERVER /segment.ts?c > До речі, щоб закрити питання — відсутня камера, яка зареєстрована в порталі, але за фактом не працює.
Скажімо, ось якось так:
Знову ж таки, код писався екстраординарно з метою перевірки концепту і не є прикладом дотримання PEP8, але абсолютно працює. Швидкість завантаження з виразних причин залежить від багатьох факторів.