<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>yegorov-p: homepage</title>
	
	<link>http://www.yegorov-p.ru</link>
	<description>I did it 4 lulz! =)</description>
	<lastBuildDate>Tue, 22 May 2012 09:49:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/yegorov-p" /><feedburner:info uri="yegorov-p" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>300 золотых от Prime World</title>
		<link>http://feedproxy.google.com/~r/yegorov-p/~3/aailw3WroX0/300-zolotyx-ot-prime-world</link>
		<comments>http://www.yegorov-p.ru/300-zolotyx-ot-prime-world#comments</comments>
		<pubDate>Sun, 08 Apr 2012 16:47:10 +0000</pubDate>
		<dc:creator>yegorov-p</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.yegorov-p.ru/?p=366</guid>
		<description><![CDATA[Яндекс.деньги расщедрились. Кому нужно &#8211; забирайте VSKLLM48YJWKUHST ЗЫ Больше нет и не будет]]></description>
			<content:encoded><![CDATA[<p>Яндекс.деньги расщедрились.<br />
Кому нужно &#8211; забирайте<br />
<strong>VSKLLM48YJWKUHST</strong></p>
<p>ЗЫ Больше нет и не будет</p>
<img src="http://feeds.feedburner.com/~r/yegorov-p/~4/aailw3WroX0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yegorov-p.ru/300-zolotyx-ot-prime-world/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yegorov-p.ru/300-zolotyx-ot-prime-world</feedburner:origLink></item>
		<item>
		<title>Массовая запись с камер на выборах Президента</title>
		<link>http://feedproxy.google.com/~r/yegorov-p/~3/DwwweE2Xce8/massovaya-zapis-s-kamer-na-vyborax-prezidenta</link>
		<comments>http://www.yegorov-p.ru/massovaya-zapis-s-kamer-na-vyborax-prezidenta#comments</comments>
		<pubDate>Thu, 05 Apr 2012 10:49:49 +0000</pubDate>
		<dc:creator>yegorov-p</dc:creator>
				<category><![CDATA[Программизмы]]></category>

		<guid isPermaLink="false">http://www.yegorov-p.ru/?p=360</guid>
		<description><![CDATA[Итак, пока еще что-то помню, стоит рассказать о небольшом проекте по записи всех камер своего города во время выборов Президента России в 2012 году. Как всем известно, в декабре 2011 года Владимир Путин предложил оборудовать все избирательные участки страны веб-камерами, на что была выделена весьма большая сумма. Ростелеком, выигравший тендер, в короткие сроки смог реализовать [...]]]></description>
			<content:encoded><![CDATA[<p>Итак, пока еще что-то помню, стоит рассказать о небольшом проекте по записи всех камер своего города во время выборов Президента России в 2012 году. Как всем известно, в декабре 2011 года Владимир Путин предложил оборудовать все избирательные участки страны веб-камерами, на что была выделена весьма большая сумма. Ростелеком, выигравший тендер, в короткие сроки смог реализовать данный проект и в день выборов обеспечить доступ к камер. Мне стало интересно реализовать систему, которая бы смогла записать видео с максимального количества камер.</p>
<p>Итак, перейдем к собственно технической части, благо она весьма примитивна: примерно каждые 15 секунд по определенному адресу обновлялся плейлист, в котором были перечислены ссылки на последние 4 чанка видео с камеры. Фактически вся задача сводилась к тому, чтобы своевременно обновлять кучу плейлистов и скачивать кучу чанков.</p>
<p>В исходнике веб-страницы был найден следующий кусочек кода:<br />
<code>var caches = ['188.254.112.50','188.254.112.51','188.254.112.52'];<br />
var cache = caches[Math.round(Math.random() * (caches.length-1))];<br />
var url = 'http://' + cache + '/master.m3u8?cid=' + uuid;</code><br />
url это адрес того самого плейлиста.<br />
cache &#8211; это адрес сервера, с которого можно было скачать чанк. На каждую камеру приходилось от 2 до 4 таких серверов.<br />
uuid &#8211; это уникальный хеш камеры.</p>
<p>Все эти данные можно было получить простым запросом в Firebug вида <code>CorePlayer.url</code>. Вернется что-то вроде<br />
<code>http://188-254-112-53.webvybory2012.ru/master.m3u8?cid=db58e3e2-4a69-11e1-8a16-001999c762e1</code></p>
<p>После этого каждые 15 секунд мы качаем плейлист, выдираем оттуда ссылки на чанки и скачиваем и складываем их в папки. Единственным опасением была обещанная капча, для противодействия ей был заранее проплачен аккаунт на antigate.com, но капчи так и не появилось.</p>
<p>Код писался в сверхсжатые сроки, поэтому по прошествии времени даже у меня вызывает ужас отдельными элементами быдлокода, но дабы не искажать историю, выложу как было =)</p>
<pre class="brush:python">import urllib
import os
from time import strftime, localtime, sleep
import socket
import threading

#Адрес сервера syslog, куда сыпалась вся статистика
syslog_server='127.0.0.1'
syslog_port=514
#Корневая папка, куда будем складировать чанки
directory='dumps'

#Массив с id камер, их хешами и списком серверов, откуда можно тянуть чанки
cams=[
['563-1', '3b0ae812-446b-11e1-bef9-f0def1c11a02', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['563-2', '3b101a6c-446b-11e1-bef9-f0def1c11a02', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['564-1', 'e8acb2b8-440a-11e1-b2a7-f0def1c0e5b4', ['188.254.112.34', '188.254.112.36', '188.254.112.35']],
['564-2', 'e8b1e6ca-440a-11e1-b2a7-f0def1c0e5b4', ['188.254.112.34', '188.254.112.36', '188.254.112.69']],
['565-1', '8796a3d8-472c-11e1-bd36-e89a8ffc5cfc', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['565-2', '87918394-472c-11e1-bd36-e89a8ffc5cfc', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['566-1', '9abc638a-472c-11e1-ac88-e89a8ffc5dc2', ['188.254.112.66', '188.254.112.67', '188.254.112.68', '188.254.112.68']],
['566-2', '9ac181f8-472c-11e1-ac88-e89a8ffc5dc2', ['188.254.112.66', '188.254.112.67', '188.254.112.68']],
['567-1', 'e08d29e0-4479-11e1-b61e-f0def1c2234b', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['567-2', 'e087ff24-4479-11e1-b61e-f0def1c2234b', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['568-1', '9da63436-472c-11e1-b1f3-e89a8ffc5d76', ['188.254.112.82', '188.254.112.83', '188.254.112.84']],
['568-2', '9da11906-472c-11e1-b1f3-e89a8ffc5d76', ['188.254.112.82', '188.254.112.83', '188.254.112.84']],
['570-1', 'b7277f66-43dd-11e1-9520-f0def1c0f02c', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.50']],
['570-2', 'b7225608-43dd-11e1-9520-f0def1c0f02c', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.52']],
['571-1', '50370306-4529-11e1-a20b-047d7b4cabc6', ['188.254.112.82', '188.254.112.83', '188.254.112.84']],
['571-2', '503c49ce-4529-11e1-a20b-047d7b4cabc6', ['188.254.112.82', '188.254.112.83', '188.254.112.84', '188.254.112.84']],
['572-1', '2c390f76-446b-11e1-9968-f0def1c08b1e', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.4']],
['572-2', '2c3e422a-446b-11e1-9968-f0def1c08b1e', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.4']],
['573-1', 'f3cb78d0-4475-11e1-a227-f0def1c0e409', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['573-2', 'f3c64d24-4475-11e1-a227-f0def1c0e409', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.4']],
['574-1', '3e8f2cb4-446b-11e1-8d18-f0def1c119ae', ['188.254.112.66', '188.254.112.67', '188.254.112.68', '188.254.112.68']],
['574-2', '3e89f938-446b-11e1-8d18-f0def1c119ae', ['188.254.112.66', '188.254.112.67', '188.254.112.68', '188.254.112.68']],
['575-1', 'daf42c2c-446f-11e1-b332-f0def1c10a4b', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['575-2', 'daf99fea-446f-11e1-b332-f0def1c10a4b', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['576-1', '94b181aa-472c-11e1-b9b9-047d7b18c018', ['188.254.112.82', '188.254.112.83', '188.254.112.84']],
['576-2', '94b6b152-472c-11e1-b9b9-047d7b18c018', ['188.254.112.82', '188.254.112.83', '188.254.112.84']],
['577-1', 'e1fc53ec-440a-11e1-80c7-f0def1c0fcf1', ['188.254.112.50', '188.254.112.51', '188.254.112.52', '188.254.112.52']],
['577-2', 'e1f71efe-440a-11e1-80c7-f0def1c0fcf1', ['188.254.112.50', '188.254.112.51', '188.254.112.52']],
['578-1', '237803fa-4476-11e1-bf8b-f0def1c087bc', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.4']],
['578-2', '237d305a-4476-11e1-bf8b-f0def1c087bc', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['579-1', '0b53a996-4476-11e1-8844-f0def1c0de54', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.4']],
['579-2', '0b5911d8-4476-11e1-8844-f0def1c0de54', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['580-1', '90fcf6ae-43ec-11e1-badd-f0def1c0f702', ['188.254.116.2', '188.254.116.3', '188.254.116.4', '188.254.112.20']],
['580-2', '91021db4-43ec-11e1-badd-f0def1c0f702', ['188.254.116.2', '188.254.116.3', '188.254.116.4', '188.254.112.19']],
['581-1', '99ce635a-4471-11e1-8a4e-f0def1c29212', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['581-2', '99c8ff1e-4471-11e1-8a4e-f0def1c29212', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['582-1', 'd1148a7e-4471-11e1-99dd-f0def1c12c11', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['582-2', 'd119b648-4471-11e1-99dd-f0def1c12c11', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['583-1', '8fef7ee2-472c-11e1-892c-047d7b2d5d2e', ['188.254.112.18', '188.254.112.19', '188.254.112.20', '188.254.112.20']],
['583-2', '8fea35e0-472c-11e1-892c-047d7b2d5d2e', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['584-1', 'ee13424c-4475-11e1-abb2-f0def1c0e538', ['188.254.112.34', '188.254.112.36', '188.254.112.36']],
['584-2', 'ee18b04c-4475-11e1-abb2-f0def1c0e538', ['188.254.112.34', '188.254.112.36', '188.254.112.35']],
['585-1', '9071c42e-472c-11e1-9365-047d7b4cb8d5', ['188.254.112.34', '188.254.112.36', '188.254.112.36']],
['585-2', '9076ed28-472c-11e1-9365-047d7b4cb8d5', ['188.254.112.34', '188.254.112.36', '188.254.112.35']],
['586-1', '7b67ebca-448a-11e1-8ce4-f0def1c23229', ['188.254.112.66', '188.254.112.67', '188.254.112.68']],
['586-2', '7b6d14f6-448a-11e1-8ce4-f0def1c23229', ['188.254.112.66', '188.254.112.67', '188.254.112.68', '188.254.112.68']],
['587-1', '4ae7a8da-4473-11e1-a441-f0def1c096b5', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['587-2', '4ae279f0-4473-11e1-a441-f0def1c096b5', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['589-1', 'b44861a2-43dd-11e1-a4d6-f0def1c0e094', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.4']],
['589-2', 'b44d9a1e-43dd-11e1-a4d6-f0def1c0e094', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['590-1', 'dee269a2-4479-11e1-bc33-f0def1c11ff0', ['188.254.112.34', '188.254.112.36', '188.254.112.36']],
['590-2', 'dee7999a-4479-11e1-bc33-f0def1c11ff0', ['188.254.112.34', '188.254.112.36']],
['591-1', 'dcb435d4-446f-11e1-8051-f0def1c0f3b1', ['188.254.112.50', '188.254.112.51', '188.254.112.52']],
['591-2', 'dcb967ac-446f-11e1-8051-f0def1c0f3b1', ['188.254.112.50', '188.254.112.51', '188.254.112.52']],
['592-1', 'bc25adb2-43c9-11e1-9306-f0def1c0ea6d', ['188.254.112.18', '188.254.112.19', '188.254.112.20', '188.254.112.20']],
['592-2', 'bc2adee0-43c9-11e1-9306-f0def1c0ea6d', ['188.254.112.18', '188.254.112.19', '188.254.112.20', '188.254.112.20']],
['593-1', 'd242bb98-446f-11e1-a322-f0def1c0f8ff', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['593-2', 'd23d83c6-446f-11e1-a322-f0def1c0f8ff', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['594-1', '8704e56a-4489-11e1-a6bb-f0def1c0f4b6', ['188.254.112.50', '188.254.112.51', '188.254.112.52', '188.254.112.52']],
['594-2', '86ffc008-4489-11e1-a6bb-f0def1c0f4b6', ['188.254.112.50', '188.254.112.51', '188.254.112.52']],
['595-1', 'd18b9c20-43ab-11e1-8a66-f0def1c0f1d7', ['188.254.112.66', '188.254.112.67', '188.254.112.68']],
['595-2', 'd1866e26-43ab-11e1-8a66-f0def1c0f1d7', ['188.254.112.66', '188.254.112.67', '188.254.112.68']],
['596-1', '83d1ad2c-43b9-11e1-8c21-f0def1c10519', ['188.254.112.18', '188.254.112.19', '188.254.112.20', '188.254.112.20']],
['596-2', '83cc2e38-43b9-11e1-8c21-f0def1c10519', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['597-1', 'e24a98f6-446c-11e1-b203-f0def1c0e55d', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['597-2', 'e24561ba-446c-11e1-b203-f0def1c0e55d', ['188.254.112.18', '188.254.112.19', '188.254.112.20', '188.254.112.20']],
['598-1', '8bb110f2-472c-11e1-8d65-047d7b18bff0', ['188.254.112.82', '188.254.112.83', '188.254.112.84']],
['598-2', '8bb63690-472c-11e1-8d65-047d7b18bff0', ['188.254.112.82', '188.254.112.83', '188.254.112.84']],
['599-1', 'f094ee4e-4475-11e1-a466-f0def1c0fe3f', ['188.254.112.34', '188.254.112.36', '188.254.112.36']],
['599-2', 'f09a1c52-4475-11e1-a466-f0def1c0fe3f', ['188.254.112.34', '188.254.112.36', '188.254.112.35']],
['600-1', '7de4411a-4489-11e1-a3bd-f0def1c0fea8', ['188.254.112.34', '188.254.112.36', '188.254.112.35']],
['600-2', '7de9764e-4489-11e1-a3bd-f0def1c0fea8', ['188.254.112.34', '188.254.112.36', '188.254.112.36']],
['601-1', 'be2455dc-43dd-11e1-9f85-f0def1c0f08d', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.4']],
['601-2', 'be1f212a-43dd-11e1-9f85-f0def1c0f08d', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['602-1', '5fc25d12-4415-11e1-a327-f0def1c0e521', ['188.254.112.66', '188.254.112.67', '188.254.112.68', '188.254.112.68']],
['602-2', '5fc7831e-4415-11e1-a327-f0def1c0e521', ['188.254.112.66', '188.254.112.67', '188.254.112.68']],
['603-1', '583bc9bc-4473-11e1-a878-f0def1c09a5d', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['603-2', '5840f14e-4473-11e1-a878-f0def1c09a5d', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['604-1', 'deff1bba-446f-11e1-a309-f0def1c10b59', ['188.254.112.66', '188.254.112.67', '188.254.112.68']],
['604-2', 'def9f536-446f-11e1-a309-f0def1c10b59', ['188.254.112.66', '188.254.112.67', '188.254.112.68']],
['605-1', '9815c09a-4489-11e1-a0b9-f0def1c0ff60', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['605-2', '981ae7f0-4489-11e1-a0b9-f0def1c0ff60', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.4']],
['606-1', 'ce51fa76-446f-11e1-bb85-f0def1c09684', ['188.254.112.34', '188.254.112.36', '188.254.112.35']],
['606-2', 'ce5727d0-446f-11e1-bb85-f0def1c09684', ['188.254.112.34', '188.254.112.36', '188.254.112.36']],
['607-1', 'e01c4778-446c-11e1-91e7-f0def1c0f5c9', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['607-2', 'e01702f4-446c-11e1-91e7-f0def1c0f5c9', ['188.254.112.18', '188.254.112.19', '188.254.112.20', '188.254.112.20']],
['608-1', '0048f59c-4476-11e1-a6bb-f0def1c0ff8b', ['188.254.112.66', '188.254.112.67', '188.254.112.68', '188.254.112.68']],
['608-2', '0043cf40-4476-11e1-a6bb-f0def1c0ff8b', ['188.254.112.66', '188.254.112.67', '188.254.112.68']],
['609-1', 'd10c0810-446f-11e1-91ca-f0def1c0ea2b', ['188.254.112.50', '188.254.112.51', '188.254.112.52']],
['609-2', 'd1113114-446f-11e1-91ca-f0def1c0ea2b', ['188.254.112.50', '188.254.112.51', '188.254.112.52']],
['610-1', 'f26d5f72-4479-11e1-8a22-f0def1c122d1', ['188.254.112.18', '188.254.112.19', '188.254.112.20', '188.254.112.20']],
['610-2', 'f26830ba-4479-11e1-8a22-f0def1c122d1', ['188.254.112.18', '188.254.112.19', '188.254.112.20']],
['611-1', 'd86e78d2-453b-11e1-8c49-047d7b3e6407', ['188.254.112.82', '188.254.112.83', '188.254.112.84']],
['611-2', 'd87398c6-453b-11e1-8c49-047d7b3e6407', ['188.254.112.82', '188.254.112.83', '188.254.112.84']],
['612-1', 'bae2cba6-43c9-11e1-b466-f0def1c0e89f', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.4']],
['612-2', 'bae7fa7c-43c9-11e1-b466-f0def1c0e89f', ['188.254.112.2', '188.254.112.3', '188.254.112.4', '188.254.112.4']],
['613-1', 'be06ff46-43c9-11e1-a4c6-f0def1c0fcba', ['188.254.112.34', '188.254.112.36', '188.254.112.36']],
['613-2', 'be0c354c-43c9-11e1-a4c6-f0def1c0fcba', ['188.254.112.34', '188.254.112.36', '188.254.112.36']],
['614-1', '4a2a114e-4473-11e1-9b09-f0def1c22294', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['614-2', '4a24ec8c-4473-11e1-9b09-f0def1c22294', ['188.254.112.2', '188.254.112.3', '188.254.112.4']],
['615-1', 'c9061418-43c9-11e1-8dd6-f0def1c0fc08', ['188.254.112.82', '188.254.112.83', '188.254.112.84']],
['615-2', 'c900e060-43c9-11e1-8dd6-f0def1c0fc08', ['188.254.112.82', '188.254.112.83', '188.254.112.84', '188.254.112.84']],
['616-1', 'dc0e228c-446c-11e1-bd8c-f0def1c0e8e2', ['188.254.112.50', '188.254.112.51', '188.254.112.52']],
['616-2', 'dc1351e4-446c-11e1-bd8c-f0def1c0e8e2', ['188.254.112.50', '188.254.112.51', '188.254.112.52']],
['617-1', 'b87b4c12-43c9-11e1-935e-f0def1c0ecca', ['188.254.112.66', '188.254.112.67', '188.254.112.68']],
['617-2', 'b8762200-43c9-11e1-935e-f0def1c0ecca', ['188.254.112.66', '188.254.112.67', '188.254.112.68']],
['618-1', '8b7c6dac-4489-11e1-ac86-f0def1c22c70', ['188.254.112.34','188.254.112.35','188.254.112.36']],
['618-2', '8b819e44-4489-11e1-ac86-f0def1c22c70', ['188.254.112.34','188.254.112.35','188.254.112.36']]
]

#обозначения уровней для сислога
LEVEL = {
	'emerg': 0, 'alert':1, 'crit': 2, 'err': 3,
	'warning': 4, 'notice': 5, 'info': 6, 'debug': 7
}

#!!!!!!!!!!!!!!!!!!!!!!!!!!CorePlayer.url + '|'+d[1]

#процедурка, пишущая в сислог. Копирайты потеряны, сорри =(
def syslog(message, level=LEVEL['notice'], host=syslog_server, port=syslog_port):
	sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
	data = '%s' % (level + 24, message)
	sock.sendto(data, (host, port))
	sock.close()

#Основная процедура
def cam_rip(num,hash,servers):
    syslog('Recording cam %s at %s'%(hash, num), level=LEVEL['info'])
    try:
        os.mkdir('./%s/%s'%(directory,num))
    except:
        pass

    #Запускаем бесконечный цикл
    while 1:
        try:
            server=servers[0]
            #Скачиваем текущий плейлист
            page = urllib.urlopen("http://%s/variant.m3u8?cid=%s&amp;var=orig"%(server,hash)).read()
            #Если плейлист кошерен, выдираем ссылки на отдельные чанки и скачиваем их
            if '/segment' in page:
                for i in page.split('\n'):
                    if '/segment' in i:
                        filename=strftime("%d-%b-%H-%M-%S", localtime(int(i[-13:-3])))
                        f=open('./%s/%s/%s.ts'%(directory,num,filename),'wb')
    #                    syslog('Chunk %s saved'%(filename), level=LEVEL['notice'])
                        f.write(urllib.urlopen("http://%s%s"%(server,i)).read())
                        f.close()
            else:
            #В противном случае ругаемся в сислог и делаем ротацию сервера
                syslog('No signal!Rotating server on cam %s at %s'%(hash,num), level=LEVEL['err'])
                servers.append(servers[0])
                del servers[0]
            sleep(60)
        except Exception,e:
            syslog('Error on cam %s: %s'%(hash,e), level=LEVEL['err'])
            servers.append(servers[0])
            del servers[0]

try:
    os.mkdir(directory)
except:
    pass

#Запускаем кучу потоков для каждой из камер
for i in cams:
    threading.Thread(target=cam_rip, kwargs={"num": i[0],"hash": i[1],"servers": i[2]}).start()
    sleep(1)
syslog('System started.', level=LEVEL['notice'])</pre>
<p>Результатом работы в течение всего дня выборов стала папочка весом в 120 гигабайт, содержащая очень много 15-секундных файликов. Поскольку так смотреть их не очень удобно, было решено склеить их в большое 20-часовое видео и выложить в интернеты. Скачать их всех можно <a href="http://www.yegorov-p.ru/proekty/vybory-prezidenta-rossii-2012-novomoskovsk">вот здесь</a></p>
<img src="http://feeds.feedburner.com/~r/yegorov-p/~4/DwwweE2Xce8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yegorov-p.ru/massovaya-zapis-s-kamer-na-vyborax-prezidenta/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yegorov-p.ru/massovaya-zapis-s-kamer-na-vyborax-prezidenta</feedburner:origLink></item>
		<item>
		<title>Небольшое обновление SoftMVR</title>
		<link>http://feedproxy.google.com/~r/yegorov-p/~3/B4xzS0atio8/nebolshoe-obnovlenie-softmvr</link>
		<comments>http://www.yegorov-p.ru/nebolshoe-obnovlenie-softmvr#comments</comments>
		<pubDate>Sun, 01 Apr 2012 19:58:38 +0000</pubDate>
		<dc:creator>yegorov-p</dc:creator>
				<category><![CDATA[Программизмы]]></category>

		<guid isPermaLink="false">http://www.yegorov-p.ru/?p=345</guid>
		<description><![CDATA[По многочисленным просьбам реализовал возможность указания требуемого сетевого интерфейса в строке запуска программы. Например, написав в командной строке softmvr.exe 2 вы запустите SoftMVR с выбранным сетевым интерфейсом №2. В будущем также планируется реализовать таки сворачивание консольного окошка в трей (ага, мне оно тоже надоело) и возможность вручную указать тег влана.]]></description>
			<content:encoded><![CDATA[<p>По многочисленным просьбам реализовал возможность указания требуемого сетевого интерфейса в строке запуска программы. Например, написав в командной строке <code>softmvr.exe 2</code> вы запустите SoftMVR с выбранным сетевым интерфейсом №2.<br />
В будущем также планируется реализовать таки сворачивание консольного окошка в трей (ага, мне оно тоже надоело) и возможность вручную указать тег влана.</p>
<img src="http://feeds.feedburner.com/~r/yegorov-p/~4/B4xzS0atio8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yegorov-p.ru/nebolshoe-obnovlenie-softmvr/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.yegorov-p.ru/nebolshoe-obnovlenie-softmvr</feedburner:origLink></item>
		<item>
		<title>USDownloader plugin for fileape.com</title>
		<link>http://feedproxy.google.com/~r/yegorov-p/~3/IeJPdc0xbk0/usdownloader-plugin-for-fileape-com</link>
		<comments>http://www.yegorov-p.ru/usdownloader-plugin-for-fileape-com#comments</comments>
		<pubDate>Tue, 27 Dec 2011 07:38:54 +0000</pubDate>
		<dc:creator>yegorov-p</dc:creator>
				<category><![CDATA[Программизмы]]></category>

		<guid isPermaLink="false">http://www.yegorov-p.ru/?p=291</guid>
		<description><![CDATA[Брать здесь]]></description>
			<content:encoded><![CDATA[<p>Брать <a href="http://goo.gl/FKYny">здесь</a></p>
<img src="http://feeds.feedburner.com/~r/yegorov-p/~4/IeJPdc0xbk0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yegorov-p.ru/usdownloader-plugin-for-fileape-com/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yegorov-p.ru/usdownloader-plugin-for-fileape-com</feedburner:origLink></item>
		<item>
		<title>SoftMVR</title>
		<link>http://feedproxy.google.com/~r/yegorov-p/~3/Ztt_4UUUC94/softmvr</link>
		<comments>http://www.yegorov-p.ru/softmvr#comments</comments>
		<pubDate>Thu, 08 Dec 2011 11:20:20 +0000</pubDate>
		<dc:creator>yegorov-p</dc:creator>
				<category><![CDATA[iptv]]></category>
		<category><![CDATA[popular]]></category>
		<category><![CDATA[Программизмы]]></category>

		<guid isPermaLink="false">http://www.yegorov-p.ru/?p=287</guid>
		<description><![CDATA[Продолжаем пытаться смотреть IPTV от Росинтела без капиталовложений =) SoftMVR]]></description>
			<content:encoded><![CDATA[<p>Продолжаем пытаться смотреть IPTV от Росинтела без капиталовложений =)<br />
<a href="http://www.yegorov-p.ru/proekty/softmvr">SoftMVR</a></p>
<img src="http://feeds.feedburner.com/~r/yegorov-p/~4/Ztt_4UUUC94" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yegorov-p.ru/softmvr/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yegorov-p.ru/softmvr</feedburner:origLink></item>
		<item>
		<title>КЛАДР в MySQL</title>
		<link>http://feedproxy.google.com/~r/yegorov-p/~3/_0oVoGbPnWc/kladr-v-mysql-2</link>
		<comments>http://www.yegorov-p.ru/kladr-v-mysql-2#comments</comments>
		<pubDate>Tue, 06 Sep 2011 07:23:57 +0000</pubDate>
		<dc:creator>yegorov-p</dc:creator>
				<category><![CDATA[Программизмы]]></category>

		<guid isPermaLink="false">http://www.yegorov-p.ru/?p=243</guid>
		<description><![CDATA[Поскольку классификатор адресов Российской Федерации (КЛАДР) официально до сих пор представлен сугубо в древнем формате dbf, приходится использовать различные пляски с бубном, чтобы перегнать его в более актуальный MySQL. Обычно брал готовый дамп отсюда, но там теперь лежит немного неактуальная версия. Собственно, на этой странице находится ссылка на актуальный дамп для MySQL.]]></description>
			<content:encoded><![CDATA[<p>Поскольку классификатор адресов Российской Федерации (КЛАДР) официально до сих пор представлен сугубо в древнем формате dbf, приходится использовать различные пляски с бубном, чтобы перегнать его в более актуальный MySQL. Обычно брал готовый дамп <a href="http://luckmus.ru/kladr-v-sql.html" target="_blank">отсюда</a>, но там теперь лежит немного неактуальная версия. Собственно, <a href="http://www.yegorov-p.ru/proekty/kladr-v-mysql" title="КЛАДР в MySQL">на этой странице</a> находится ссылка на актуальный дамп для MySQL.</p>
<img src="http://feeds.feedburner.com/~r/yegorov-p/~4/_0oVoGbPnWc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yegorov-p.ru/kladr-v-mysql-2/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.yegorov-p.ru/kladr-v-mysql-2</feedburner:origLink></item>
		<item>
		<title>Инвайты на Google+</title>
		<link>http://feedproxy.google.com/~r/yegorov-p/~3/jbAjYbEOqCY/invajty-na-google</link>
		<comments>http://www.yegorov-p.ru/invajty-na-google#comments</comments>
		<pubDate>Fri, 01 Jul 2011 05:46:13 +0000</pubDate>
		<dc:creator>yegorov-p</dc:creator>
				<category><![CDATA[Интернет]]></category>

		<guid isPermaLink="false">http://www.yegorov-p.ru/?p=239</guid>
		<description><![CDATA[Есть некоторое количество инвайтов на новую социальную сеть от Google. Кому нужно, могу выслать =)]]></description>
			<content:encoded><![CDATA[<p>Есть некоторое количество инвайтов на новую социальную сеть от Google. Кому нужно, могу выслать =)</p>
<img src="http://feeds.feedburner.com/~r/yegorov-p/~4/jbAjYbEOqCY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yegorov-p.ru/invajty-na-google/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.yegorov-p.ru/invajty-na-google</feedburner:origLink></item>
		<item>
		<title>ENOG1 Live</title>
		<link>http://feedproxy.google.com/~r/yegorov-p/~3/aOedd3i3HJY/enog1-live</link>
		<comments>http://www.yegorov-p.ru/enog1-live#comments</comments>
		<pubDate>Tue, 07 Jun 2011 11:42:50 +0000</pubDate>
		<dc:creator>yegorov-p</dc:creator>
				<category><![CDATA[Интернет]]></category>

		<guid isPermaLink="false">http://www.yegorov-p.ru/?p=233</guid>
		<description><![CDATA[via enog.org]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://octopus.comdi.com/broadcast/player/stream/?event_id=4002" width="448" height="252" frameborder="0" scrolling="0" border="0" style="border:0px;"></iframe><br />
via <a href="http://www.enog.org/">enog.org</a></p>
<img src="http://feeds.feedburner.com/~r/yegorov-p/~4/aOedd3i3HJY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yegorov-p.ru/enog1-live/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yegorov-p.ru/enog1-live</feedburner:origLink></item>
		<item>
		<title>Твиттера Новомосковска обновлен</title>
		<link>http://feedproxy.google.com/~r/yegorov-p/~3/3S8CSbrDRPY/tvittera-novomoskovska-obnovlen</link>
		<comments>http://www.yegorov-p.ru/tvittera-novomoskovska-obnovlen#comments</comments>
		<pubDate>Tue, 25 Jan 2011 17:16:41 +0000</pubDate>
		<dc:creator>yegorov-p</dc:creator>
				<category><![CDATA[Программизмы]]></category>

		<guid isPermaLink="false">http://www.yegorov-p.ru/?p=221</guid>
		<description><![CDATA[Наконец-то дошли руки поправить старые косяки и добавить новых =) Вернул Виртуальный Новомосковск в качестве источника, заодно сменил стандартную тему, за бэкграунд спасибо забавному сервису Wordle]]></description>
			<content:encoded><![CDATA[<p>Наконец-то дошли руки поправить старые косяки и добавить новых =)<br />
Вернул <a href="http://www.nmsk.ru/">Виртуальный Новомосковск</a> в качестве источника, заодно сменил стандартную тему, за бэкграунд спасибо забавному сервису <a href="http://www.wordle.net/">Wordle</a></p>
<img src="http://feeds.feedburner.com/~r/yegorov-p/~4/3S8CSbrDRPY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yegorov-p.ru/tvittera-novomoskovska-obnovlen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.yegorov-p.ru/tvittera-novomoskovska-obnovlen</feedburner:origLink></item>
		<item>
		<title>Описание формата JTV</title>
		<link>http://feedproxy.google.com/~r/yegorov-p/~3/bG9lwx8sxI4/opisanie-formata-jtv</link>
		<comments>http://www.yegorov-p.ru/opisanie-formata-jtv#comments</comments>
		<pubDate>Wed, 19 Jan 2011 09:36:00 +0000</pubDate>
		<dc:creator>yegorov-p</dc:creator>
				<category><![CDATA[Программизмы]]></category>

		<guid isPermaLink="false">http://www.yegorov-p.ru/?p=135</guid>
		<description><![CDATA[Пришлось тут столкнуться с популярным форматом телепрограмм &#8211; JTV. В отличие от простого и логичного XMLTV, творение Beholder кажется жутко непонятным. К моему удивлению, в интернете нет вменяемого описания формата, поэтому решил написать свое. Для работы нам пригодится любой хексовый редактор, например HxD Итак, телепрограмма в формате JTV представляет собой кучу файлов, где каждому каналу [...]]]></description>
			<content:encoded><![CDATA[<p>Пришлось тут столкнуться с популярным форматом телепрограмм &#8211; JTV. В отличие от простого и логичного XMLTV, творение Beholder кажется жутко непонятным. К моему удивлению, в интернете нет вменяемого описания формата, поэтому решил написать свое. Для работы нам пригодится любой хексовый редактор, например <a href="http://mh-nexus.de/en/hxd/">HxD</a></p>
<p>Итак, телепрограмма в формате JTV представляет собой кучу файлов, где каждому каналу соответствует два файла с расширениями .pdt и .ndx и соответствующими названию канала именами.</p>
<p><strong>PDT</strong><br />
Файл всегда начинается с записи <em>JTV 3.x TV Program Data</em>, за которым всегда следует три символа <em>0Ah</em>.<br />
После этого последовательно перечисляются названия телепрограмм в следующем формате:<br />
<em>Длина названия программы, записанная в 2 байта. Название программы.</em><br />
Например, программа называется <em>Your Style.</em>. В шестнадцатеричной системе выглядит как <em>59 6F 75 72 20 53 74 79 6C 65 2E</em>. В названии 11 (0Bh) символов. Конечная запись выглядит как <em>0B 00 59 6F 75 72 20 53 74 79 6C 65 2E</em></p>
<p>Например, PDT файл может выглядеть так:<br />
<code><strong>4A 54 56 20 33 2E 78 20 54 56 20 50 72 6F 67 72</strong> <strong>JTV 3.x TV Progr</strong><br />
<strong>61 6D 20 44 61 74 61 0A 0A 0A</strong> 0B 00 59 6F 75 72    <strong>am Data...</strong>..Your<br />
20 53 74 79 6C 65 2E <strong>0B 00 59 6F 75 72 20 53 74</strong> Style.<strong>..Your St</strong><br />
<strong>79 6C 65 2E</strong> 0A 00 59 6F 75 72 20 4C 69 66 65 2E     <strong>yle.</strong>..Your Life.<br />
<strong>0F 00 50 72 69 6D 65 20 53 68 6F 77 63 61 73 65     ..Prime Showcase</strong><br />
<strong>2E                                                                     .</strong></code></p>
<p><strong>NDX</strong><br />
Файл начинается с 2 байт, обозначающих общее количество записей. Например, если всего имеется 20 (32h) записей, то эти 2 байта будут выглядеть как <em>32 00</em> Если в файле больше 255 записей, например 300 (<em>012Сh</em>), то байты инвертируются, то есть фактически записываются как <em>2С 01</em><br />
После этого записываются данные для каждой программы, по 12 байт каждая. Структура у них следующая: в начале идут два нулевых байта (<em>00 00</em>), за ними следует 8 байт, обозначающие дату и время начала телепрограммы, в виде FILETIME. FILETIME это 64-х разрядное значение, обозначающее количество интервалов по 100 наносекунд каждый, прошедших с первого января 1601 года. Например, <em>00 C8 A6 64 03 B6 CB 01</em> обозначает 56477943831382785 таких интервалов, что соответствует 5 утра 17 января 2011 года. В конце записываются 2 байта, обозначающие смещение в файле PDT для соответствующей программы<br />
Рассмотрим пример файла NDX в связке с вышеуказанным файлом PDT</p>
<p><code><strong>04 00</strong> 00 00 00 C8 A6 64 03 B6 CB 01 <em>1A 00</em> <strong>00 00</strong><br />
<strong>00 98 2F 28 14 B6 CB 01 <em>27 00</em></strong> 00 00 00 68 B8 EB<br />
24 B6 CB 01 <em>34 00</em> <strong>00 00 00 38 41 AF 35 B6 CB 01<br />
<em>40 00</em></strong></code></p>
<p>Смещения выделены курсивом. Например, первое смещение, <strong>1А 00</strong> соответствует смещению, где начинается <code>0B 00 (вторая строчка файла PDT)</code></p>
<p>Как-то так =)</p>
<img src="http://feeds.feedburner.com/~r/yegorov-p/~4/bG9lwx8sxI4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yegorov-p.ru/opisanie-formata-jtv/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.yegorov-p.ru/opisanie-formata-jtv</feedburner:origLink></item>
	</channel>
</rss>

