<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0"><channel><title>Mr.Daark: Блоггинг как идея</title><link>http://mrdaark.ru</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mrdaark" /><description>Про меня, про интернет, про деньги, про жизнь, про всё :)</description><language>en</language><lastBuildDate>Thu, 17 Dec 2009 22:48:49 PST</lastBuildDate><generator>http://wordpress.org/?v=abc</generator><sy:updatePeriod xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">hourly</sy:updatePeriod><sy:updateFrequency xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">1</sy:updateFrequency><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mrdaark" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="mrdaark" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmrdaark" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmrdaark" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fmrdaark" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><item><title>Twitter хакнули!</title><link>http://mrdaark.ru/twitter-xaknuli.html</link><category>Мои новости</category><category>hack</category><category>twitter</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mrdaark</dc:creator><pubDate>Thu, 17 Dec 2009 22:47:58 PST</pubDate><guid isPermaLink="false">http://mrdaark.ru/?p=132</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Сегодня с &#8220;радостью&#8221; обнаружил дефейс главной страницы популярного сервиса <a href="http://twitter.com">twitter.com</a></p>
<p><img src="http://dl.dropbox.com/u/1834466/twitter.png" alt="twitter дефейс" /></p>

<p><a href="http://feedads.g.doubleclick.net/~a/TgZyPKcJ1-MDHqrOxji7VWhfMZE/0/da"><img src="http://feedads.g.doubleclick.net/~a/TgZyPKcJ1-MDHqrOxji7VWhfMZE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/TgZyPKcJ1-MDHqrOxji7VWhfMZE/1/da"><img src="http://feedads.g.doubleclick.net/~a/TgZyPKcJ1-MDHqrOxji7VWhfMZE/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded><description>Сегодня с &amp;#8220;радостью&amp;#8221; обнаружил дефейс главной страницы популярного сервиса twitter.com</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://mrdaark.ru/twitter-xaknuli.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">25</slash:comments></item><item><title>Python: Простой пример использования twisted</title><link>http://mrdaark.ru/python-prostoj-primer-ispolzovaniya-twisted.html</link><category>Программинг</category><category>python</category><category>twisted</category><category>обучение</category><category>сайты</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mrdaark</dc:creator><pubDate>Thu, 16 Jul 2009 03:35:07 PDT</pubDate><guid isPermaLink="false">http://mrdaark.ru/?p=128</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Надо мне написать небольшой сервер, который будет принимать некие данные, сохранять их, а потом по определеным командам отдавать. Сейчас есть нечто такое же, только реализованное на LAMP, работает прямо скажем не очень быстро. Можно конечно сделать какое-то кеширование, memcache и т.д., но мне не хватает свободы маневра в текущей структуре, поэтому я решил таки переписать серверную часть, ибо клиентская вполне себе меня удовлетворяет.</p>
<p>Вообще решил сделать отдельный сервис, висящий на отличном от 80 порту и выполняющий все что мне надо. Писать решил с использование сетевого фреймворка twisted. Штука прикольная, но вот незадача, нормальной документации и примеров как то нету, того что на их сайте есть, мне явно не хватает, для того чтобы понять как и что нужно делать. Поэтому решил для начала написать простенький примерчик, который будет висеть и слушать запросы и в зависимости от url увеличивать или уменьшать внутренний счетчик.</p>
<p>Вот что получилось:</p>
<div class="scme">
<ol>
<pre class="alt"><span class="lnum">   1:  </span><span class="rem2">#&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates</span></pre>
<pre><span class="lnum">   2:  </span><span class="rem2">#&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.</span></pre>
<pre class="alt"><span class="lnum">   3:  </span>&nbsp;</pre>
<pre><span class="lnum">   4:  </span>__author__=<span class="rem">"mrdaark"</span></pre>
<pre class="alt"><span class="lnum">   5:  </span>__date__ =<span class="rem">"$15.07.2009&nbsp;21:31:01$"</span></pre>
<pre><span class="lnum">   6:  </span>&nbsp;</pre>
<pre class="alt"><span class="lnum">   7:  </span><span class="kwrd">from</span> twisted.web <span class="kwrd">import</span> server, resource</pre>
<pre><span class="lnum">   8:  </span><span class="kwrd">from</span> twisted.internet <span class="kwrd">import</span> reactor</pre>
<pre class="alt"><span class="lnum">   9:  </span><span class="kwrd">import</span> string</pre>
<pre><span class="lnum">  10:  </span>&nbsp;</pre>
<pre class="alt"><span class="lnum">  11:  </span><span class="kwrd">class</span> <span class="preproc">Consult</span>():</pre>
<pre><span class="lnum">  12:  </span>    count=<span class="rem">0</span></pre>
<pre class="alt"><span class="lnum">  13:  </span>&nbsp;</pre>
<pre><span class="lnum">  14:  </span>    <span class="kwrd">def</span> <span class="preproc">add</span>(self,x=<span class="rem">1</span>):</pre>
<pre class="alt"><span class="lnum">  15:  </span>        <b>self</b>.__class__.count+=x</pre>
<pre><span class="lnum">  16:  </span>&nbsp;</pre>
<pre class="alt"><span class="lnum">  17:  </span>    <span class="kwrd">def</span> <span class="preproc">remove</span>(self,x=<span class="rem">1</span>):</pre>
<pre><span class="lnum">  18:  </span>        <b>self</b>.__class__.count-=x</pre>
<pre class="alt"><span class="lnum">  19:  </span>&nbsp;</pre>
<pre><span class="lnum">  20:  </span><span class="kwrd">class</span> <span class="preproc">Server</span>(<b>resource</b>.Resource):</pre>
<pre class="alt"><span class="lnum">  21:  </span>    isLeaf = True</pre>
<pre><span class="lnum">  22:  </span>&nbsp;</pre>
<pre class="alt"><span class="lnum">  23:  </span>    <span class="kwrd">def</span> <span class="preproc">getChild</span>(self, name, request):</pre>
<pre><span class="lnum">  24:  </span>        <span class="kwrd">if</span> name == <span class="rem">''</span>:</pre>
<pre class="alt"><span class="lnum">  25:  </span>            <span class="kwrd">return</span> self</pre>
<pre><span class="lnum">  26:  </span>        <span class="kwrd">return</span> Resource.<span class="preproc">getChild</span>(self, name, request)</pre>
<pre class="alt"><span class="lnum">  27:  </span>&nbsp;</pre>
<pre><span class="lnum">  28:  </span>    <span class="kwrd">def</span> <span class="preproc">render</span>(self, request):</pre>
<pre class="alt"><span class="lnum">  29:  </span>        urlpath=<b>string</b>.split(request.path[<span class="rem">1</span>:],<span class="rem">'/'</span>)</pre>
<pre><span class="lnum">  30:  </span>        path=urlpath[<span class="rem">0</span>]</pre>
<pre class="alt"><span class="lnum">  31:  </span>        <span class="kwrd">if</span> <b>len</b>(urlpath)&gt;<span class="rem">1</span>:</pre>
<pre><span class="lnum">  32:  </span>            r=<b>int</b>(urlpath[<span class="rem">1</span>])</pre>
<pre class="alt"><span class="lnum">  33:  </span>        <span class="kwrd">else</span>:</pre>
<pre><span class="lnum">  34:  </span>            r=<span class="rem">1</span></pre>
<pre class="alt"><span class="lnum">  35:  </span>&nbsp;</pre>
<pre><span class="lnum">  36:  </span>        str=<span class="rem">'&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;'</span></pre>
<pre class="alt"><span class="lnum">  37:  </span>&nbsp;</pre>
<pre><span class="lnum">  38:  </span>        c=<span class="preproc">Consult</span>()</pre>
<pre class="alt"><span class="lnum">  39:  </span>        <span class="kwrd">if</span> (path==<span class="rem">'add'</span>):</pre>
<pre><span class="lnum">  40:  </span>            c.<span class="preproc">add</span>(r)  </pre>
<pre class="alt"><span class="lnum">  41:  </span>        <span class="kwrd">elif</span> (path==<span class="rem">'remove'</span>):</pre>
<pre><span class="lnum">  42:  </span>            c.<span class="preproc">remove</span>(r)</pre>
<pre class="alt"><span class="lnum">  43:  </span>&nbsp;</pre>
<pre><span class="lnum">  44:  </span>        str+= <span class="rem">"x:&nbsp;%d&lt;br&nbsp;/&gt;"</span> % (c.count)</pre>
<pre class="alt"><span class="lnum">  45:  </span>&nbsp;</pre>
<pre><span class="lnum">  46:  </span>        str+=<span class="rem">'&lt;a&nbsp;href="/add/1"&gt;add&nbsp;1&lt;/a&gt;&lt;br&nbsp;/&gt;&lt;a&nbsp;href="/remove/1"&gt;remove&nbsp;1&lt;/a&gt;&lt;/body&gt;&lt;/html&gt;'</span></pre>
<pre class="alt"><span class="lnum">  47:  </span>        <span class="kwrd">return</span> str</pre>
<pre><span class="lnum">  48:  </span>&nbsp;</pre>
<pre class="alt"><span class="lnum">  49:  </span><span class="kwrd">def</span> <span class="preproc">main</span>():</pre>
<pre><span class="lnum">  50:  </span>    site = server.Site(<span class="preproc">Server</span>())</pre>
<pre class="alt"><span class="lnum">  51:  </span>    reactor.listenTCP(<span class="rem">8080</span>, site)</pre>
<pre><span class="lnum">  52:  </span>    reactor.run()</pre>
<pre class="alt"><span class="lnum">  53:  </span>&nbsp;</pre>
<pre><span class="lnum">  54:  </span><span class="kwrd">if</span> __name__ == <span class="rem">"__main__"</span>:</pre>
<pre class="alt"><span class="lnum">  55:  </span>    <span class="preproc">main</span>() </pre>
</div>
<p>Штука запускается, вешается на 8080 порт и принимает http запросы. Увеличивает и уменьшает внутренний счетчик в зависимости о второго параметра в урл, т.е. формат урл таков: /<функция>/<параметр>. По-умолчанию, параметр равен единице.</p>
<p>Вот такая штука вообщем получилась. Теперь буду усложнять этот примерчик, чтобы он сохранял и выводил список элементов, так и родится нужный мне функционал. <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/SaGlkckf-sv2A-2WCGWnEDr-y1k/0/da"><img src="http://feedads.g.doubleclick.net/~a/SaGlkckf-sv2A-2WCGWnEDr-y1k/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/SaGlkckf-sv2A-2WCGWnEDr-y1k/1/da"><img src="http://feedads.g.doubleclick.net/~a/SaGlkckf-sv2A-2WCGWnEDr-y1k/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded><description>Надо мне написать небольшой сервер, который будет принимать некие данные, сохранять их, а потом по определеным командам отдавать. Сейчас есть нечто такое же, только реализованное на LAMP, работает прямо скажем не очень быстро. Можно конечно сделать какое-то кеширование, memcache и т.д., но мне не хватает свободы маневра в текущей структуре, поэтому я решил таки переписать [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://mrdaark.ru/python-prostoj-primer-ispolzovaniya-twisted.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments></item><item><title>IT-карма: Я почти бог :)</title><link>http://mrdaark.ru/it-karma-ya-pochti-bog.html</link><category>Мои новости</category><category>юмор</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mrdaark</dc:creator><pubDate>Wed, 15 Jul 2009 23:40:02 PDT</pubDate><guid isPermaLink="false">http://mrdaark.ru/?p=125</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Прикольно так, хотя я не знал ответов на как минимум 3 вопроса <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="200" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="false" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://ru.intel.com/business/community/oracle/widget_oracle.swf?code=Qgr%7Cw3QlIe3lTeSV" /><param name="allowfullscreen" value="false" /><embed type="application/x-shockwave-flash" width="400" height="200" src="http://ru.intel.com/business/community/oracle/widget_oracle.swf?code=Qgr%7Cw3QlIe3lTeSV" allowscriptaccess="always" allowfullscreen="false"></embed></object></p>

<p><a href="http://feedads.g.doubleclick.net/~a/mz1y7zyZMivv-ywXCNErKp8FEmo/0/da"><img src="http://feedads.g.doubleclick.net/~a/mz1y7zyZMivv-ywXCNErKp8FEmo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/mz1y7zyZMivv-ywXCNErKp8FEmo/1/da"><img src="http://feedads.g.doubleclick.net/~a/mz1y7zyZMivv-ywXCNErKp8FEmo/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded><description>Прикольно так, хотя я не знал ответов на как минимум 3 вопроса</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://mrdaark.ru/it-karma-ya-pochti-bog.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">17</slash:comments></item><item><title>Он издевается!</title><link>http://mrdaark.ru/on-izdevaetsya.html</link><category>Мои новости</category><category>бред</category><category>заработок</category><category>юмор</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mrdaark</dc:creator><pubDate>Wed, 01 Jul 2009 05:24:28 PDT</pubDate><guid isPermaLink="false">http://mrdaark.ru/?p=109</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Сейчас дир приволок денежку за мою подработку. Я честно мерзко хихикал когда он ушел.</p>
<p>Мало того что денег там кот наплакал, так видимо чтобы мне казалось что денег дофига, он выдал мне 610 рублей десятками!</p>
<p>Это 61 (шестьдесят одна) бумажка!</p>
<div id="attachment_110" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-110" title="Стопка денег" src="http://f.mrdaark.com/Home/%D0%A4%D0%BE%D1%82%D0%BE066-300x225.jpg" alt="Стопка денег" width="300" height="225" /><p class="wp-caption-text">Стопка денег</p></div>
<p>Не хилая такая стопка денежков, только куда ее девать теперь <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/wd_cxjNZb0a1R1eAC0Qw9chJB88/0/da"><img src="http://feedads.g.doubleclick.net/~a/wd_cxjNZb0a1R1eAC0Qw9chJB88/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wd_cxjNZb0a1R1eAC0Qw9chJB88/1/da"><img src="http://feedads.g.doubleclick.net/~a/wd_cxjNZb0a1R1eAC0Qw9chJB88/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded><description>Сейчас дир приволок денежку за мою подработку. Я честно мерзко хихикал когда он ушел.
Мало того что денег там кот наплакал, так видимо чтобы мне казалось что денег дофига, он выдал мне 610 рублей десятками!
Это 61 (шестьдесят одна) бумажка!
Не хилая такая стопка денежков, только куда ее девать теперь</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://mrdaark.ru/on-izdevaetsya.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">9</slash:comments></item><item><title>Python: RSS to Twitter</title><link>http://mrdaark.ru/rss2twitter.html</link><category>Программинг</category><category>python</category><category>rss</category><category>twitter</category><category>обучение</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mrdaark</dc:creator><pubDate>Mon, 29 Jun 2009 04:15:10 PDT</pubDate><guid isPermaLink="false">http://mrdaark.ru/?p=106</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>С недели 2 назад для одного хитрого сайта понадобилось сделать автоматический репост статей в твиттер. Решил не писать на php, а попробовать на python&#8217;е наваять. Откровенного говоря очень понравилось! Получилось очень просто и легко.</p>
<p>Написал наверное за пол часа, что с учетом того, что python я вообщем то не знаю совсем не плохо.</p>
<blockquote><p><code><font size="2" face="Consolas, Courier New, Courier, Monospace" color="black">
<ol>
<li><font color="#696969">#!/usr/local/bin/python</font></li>
<li><font color="#696969">#&nbsp;-*-&nbsp;coding:&nbsp;utf8&nbsp;-*-</font></li>
<li>&nbsp;</li>
<li><font color="#0000ff">import</font> urllib</li>
<li><font color="#0000ff">import</font> libxml2</li>
<li><font color="#0000ff">import</font> pickle</li>
<li><font color="#0000ff">import</font> twitter</li>
<li><font color="#0000ff">import</font> os</li>
<li><font color="#0000ff">from</font> time <font color="#0000ff">import</font> sleep</li>
<li>&nbsp;</li>
<li>bit_api=<font color="#008000">"bit.ly.api"</font></li>
<li>bit_login=<font color="#008000">"bit.ly.login"</font></li>
<li>twit_login=<font color="#008000">"name"</font></li>
<li>twit_pass=<font color="#008000">"pass"</font></li>
<li>rss_url=<font color="#008000">"http://feed"</font></li>
<li>&nbsp;</li>
<li>&nbsp;</li>
<li><font color="#0000ff">def</font> <font color="#cc6633">shorten_url</font>(long_url, login_user, api_key):</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">try</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;longUrl = <b>urllib</b>.urlencode(<b>dict</b>(longUrl=long_url))</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;login = <b>urllib</b>.urlencode(<b>dict</b>(login=login_user))</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;apiKey = <b>urllib</b>.urlencode(<b>dict</b>(apiKey=api_key))</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encodedurl=<font color="#008000">"http://api.bit.ly/shorten?version=2.0.1&amp;%s&amp;%s&amp;%s"</font> % (longUrl, login, apiKey)</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request = <b>urllib</b>.urlopen(encodedurl)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;responde = request.read()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.close()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;responde_dict = <b>eval</b>(responde)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short_url = responde_dict[<font color="#008000">"results"</font>][long_url][<font color="#008000">"shortUrl"</font>]</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font> short_url</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">except</font> IOError, e:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">raise</font> <font color="#008000">"urllib&nbsp;error&nbsp;"</font></li>
<li>&nbsp;</li>
<li>&nbsp;</li>
<li><font color="#0000ff">if</font> __name__ == <font color="#008000">'__main__'</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;doc = libxml2.parseFile(rss_url)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;links=[]</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">for</font> item <font color="#0000ff">in</font> doc.xpathEval(<font color="#008000">'//channel/item/link'</font>):</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;links.append(item.content)</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;titles=[]</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">for</font> item <font color="#0000ff">in</font> doc.xpathEval(<font color="#008000">'//channel/item/title'</font>):</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;titles.append(item.content)</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;rss_path = <b>os</b>.path.join(<b>os</b>.path.dirname(__file__), <font color="#008000">'rss.db'</font>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;file = <b>open</b> (rss_path)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;old_links=<b>pickle</b>.load(file)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<b>file</b>.close()</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;items=[]</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;f=<font color="#008000">0</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">for</font> x <font color="#0000ff">in</font> <b>xrange</b>(<font color="#008000">0</font>,<b>len</b>(links)):</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">for</font> old <font color="#0000ff">in</font> old_links:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f=<font color="#008000">0</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font> (old==links[x]):</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f=<font color="#008000">1</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">break</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font> (f==<font color="#008000">0</font>):</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;items.append(x)</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;api = twitter.Api(username=twit_login, password=twit_pass)</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">for</font> x <font color="#0000ff">in</font> items:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title=titles[x].decode(<font color="#008000">"utf8"</font>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font> <b>len</b>(title)&lt;=<font color="#008000">120</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">print</font> <font color="#008000">"link&nbsp;%s:&nbsp;%s"</font> % (x,links[x])</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font> x!=<font color="#008000">0</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(<font color="#008000">15</font>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;api.PostUpdate(title+<font color="#008000">"&nbsp;"</font>+<font color="#cc6633">shorten_url</font>(links[x], bit_login, bit_api))</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;file=<b>open</b>(rss_path,<font color="#008000">"w"</font>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;ser=<b>pickle</b>.dump(links,file)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<b>file</b>.close()</li>
<li>&nbsp;</li>
</ol>
<p></font></code></p></blockquote>
<p>Какие трудности вылезли в процессе:</p>
<p>1. Нужно как-то было не постить то что уже отправлено. Решилось сохранением списка ссылок в сериализованном виде в файл</p>
<p>2. Размер сообщение в твиттере не больше 140 символов, а надо бы в твитты еще и ссылки на статьи вставлять, притом что заголовки у статей я бы сказал не маленькие. Решилось регистрацией на bit.ly (сервис укорачивания ссылок) и собственно укорачивание. Не помню уже сам написал или с сайта их взял функцию, ибо там все так просто что даже неинтересно.</p>
<p>3. Невероятно, но встала проблема с кодировкой. Решилось за 5 минут гугления и пробования нескольких комбинаций. Что-то не понимал я откуда куда функции перекодируют. Вобщем вот так надо</p>
<blockquote><p>title.decode(&#8221;utf8&#8243;)</p></blockquote>
<p>4. Ну и задержку пришлось поставить, иначе bit.ly говорило зайдите позже <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Дальше все это безобразие запихал в крон:</p>
<blockquote><p>*/12 * * * * /usr/local/bin/python /usr/local/www/rss2twitter/rss2twit.py</p></blockquote>
<p>За время пока это дело работает, уже сделан репост 1256 твиттов, так что красота.</p>
<p>А вообще все очень просто и легко, особенно учитывая что twitter api уже написано. хотя если бы его небыло, думаю я бы просто логинился, сохранял куки и постил обычным POST запросом.</p>
<p>Ну и файлик со скриптом на последок: <a href="http://f.mrdaark.com/programmirovanie/rss2twit.tar.gz?attredirects=0" target="_blank">rss2twit.tar.gz</a></p>
<p>З.Ы. с удовольствием выслушаю критику, потому как первое не Hello, world! приложение на python&#8217;е. <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/idWxoPTZ5R9bnES2HXE9KosGskA/0/da"><img src="http://feedads.g.doubleclick.net/~a/idWxoPTZ5R9bnES2HXE9KosGskA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/idWxoPTZ5R9bnES2HXE9KosGskA/1/da"><img src="http://feedads.g.doubleclick.net/~a/idWxoPTZ5R9bnES2HXE9KosGskA/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded><description>С недели 2 назад для одного хитрого сайта понадобилось сделать автоматический репост статей в твиттер. Решил не писать на php, а попробовать на python&amp;#8217;е наваять. Откровенного говоря очень понравилось! Получилось очень просто и легко.
Написал наверное за пол часа, что с учетом того, что python я вообщем то не знаю совсем не плохо.


#!/usr/local/bin/python
#&amp;#160;-*-&amp;#160;coding:&amp;#160;utf8&amp;#160;-*-
&amp;#160;
import urllib
import libxml2
import pickle
import [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://mrdaark.ru/rss2twitter.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments></item><item><title>Хозяйке на заметку: замечания детям от посторонних</title><link>http://mrdaark.ru/xozyajke-na-zametku-zamechaniya-detyam-ot-postoronnix.html</link><category>Мои новости</category><category>бред</category><category>мелкий</category><category>юмор</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mrdaark</dc:creator><pubDate>Fri, 26 Jun 2009 23:30:41 PDT</pubDate><guid isPermaLink="false">http://mrdaark.ru/?p=104</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>На баше вычитал, надо будет попробовать</p>
<blockquote><p>Моему ребенку делают замечания посторонние люди! Как реагировать?<br />
Обучите ребенка волшебному заклинанию: &#8220;Меня мама учит, что не всякое оценочное суждение должно служить модификатором поведения&#8221;. Будучи произнесено с четкой дикцией и доброжелательно-уверенной интонацией оно действует аналогично заклинанию: &#8220;Окаменей!&#8221;, причем более надежно, хотя и ненадолго, и без опасных побочных эффектов.</p></blockquote>
<p>Думаю действительно сработает <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/JaSxPVUESXWNfxOT1F3MLsVnn-w/0/da"><img src="http://feedads.g.doubleclick.net/~a/JaSxPVUESXWNfxOT1F3MLsVnn-w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/JaSxPVUESXWNfxOT1F3MLsVnn-w/1/da"><img src="http://feedads.g.doubleclick.net/~a/JaSxPVUESXWNfxOT1F3MLsVnn-w/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded><description>На баше вычитал, надо будет попробовать
Моему ребенку делают замечания посторонние люди! Как реагировать?
Обучите ребенка волшебному заклинанию: &amp;#8220;Меня мама учит, что не всякое оценочное суждение должно служить модификатором поведения&amp;#8221;. Будучи произнесено с четкой дикцией и доброжелательно-уверенной интонацией оно действует аналогично заклинанию: &amp;#8220;Окаменей!&amp;#8221;, причем более надежно, хотя и ненадолго, и без опасных побочных эффектов.
Думаю действительно сработает  [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://mrdaark.ru/xozyajke-na-zametku-zamechaniya-detyam-ot-postoronnix.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">7</slash:comments></item><item><title>Монтирование флешки под FreeBSD</title><link>http://mrdaark.ru/montirovanie-fleshki-pod-freebsd.html</link><category>Мои новости</category><category>flash</category><category>freebsd</category><category>mount</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mrdaark</dc:creator><pubDate>Mon, 01 Jun 2009 05:42:17 PDT</pubDate><guid isPermaLink="true">http://mrdaark.ru/montirovanie-fleshki-pod-freebsd.html</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Заколебался каждый раз вспоминать как монтировать флешки под фрей, решил записать:</p>
<blockquote><p>mount_msdosfs -Lru_RU.KOI8-R /dev/da0s1 /mnt/flash</p></blockquote>

<p><a href="http://feedads.g.doubleclick.net/~a/N1b1XULoLFaqwDT1yCufBogOufs/0/da"><img src="http://feedads.g.doubleclick.net/~a/N1b1XULoLFaqwDT1yCufBogOufs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/N1b1XULoLFaqwDT1yCufBogOufs/1/da"><img src="http://feedads.g.doubleclick.net/~a/N1b1XULoLFaqwDT1yCufBogOufs/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded><description>Заколебался каждый раз вспоминать как монтировать флешки под фрей, решил записать:
mount_msdosfs -Lru_RU.KOI8-R /dev/da0s1 /mnt/flash</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://mrdaark.ru/montirovanie-fleshki-pod-freebsd.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments></item><item><title>Яндекс vs Google или устами младенца…</title><link>http://mrdaark.ru/yandeks-vs-google-ili-ustami-mladenca.html</link><category>Мои новости</category><category>google</category><category>бред</category><category>мелкий</category><category>яндекс</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mrdaark</dc:creator><pubDate>Sun, 10 May 2009 10:33:56 PDT</pubDate><guid isPermaLink="false">http://mrdaark.ru/?p=99</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Сейчас мелкий (8 месяцев) сидел и колошматил рученками по клавиатуре ноутбука и водил пальчиками по тачпаду, я чтоб время зря не пропадало, решил показать ему картинки в яндексе, набрал куку, и показал как искать. Мелкий посмотрел, 10 секунд активно колошматил по клавиатуре, и вуаля, тот же запрос в гугел.картинках!!!</p>
<p>вот такие пироги <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ))</p>

<p><a href="http://feedads.g.doubleclick.net/~a/OuaXwoOaRFomnViuUDju1Had04c/0/da"><img src="http://feedads.g.doubleclick.net/~a/OuaXwoOaRFomnViuUDju1Had04c/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/OuaXwoOaRFomnViuUDju1Had04c/1/da"><img src="http://feedads.g.doubleclick.net/~a/OuaXwoOaRFomnViuUDju1Had04c/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded><description>Сейчас мелкий (8 месяцев) сидел и колошматил рученками по клавиатуре ноутбука и водил пальчиками по тачпаду, я чтоб время зря не пропадало, решил показать ему картинки в яндексе, набрал куку, и показал как искать. Мелкий посмотрел, 10 секунд активно колошматил по клавиатуре, и вуаля, тот же запрос в гугел.картинках!!!
вот такие пироги  ))</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://mrdaark.ru/yandeks-vs-google-ili-ustami-mladenca.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments></item><item><title>Ubuntu на Asus X55SV и звук в наушники</title><link>http://mrdaark.ru/ubuntu-na-asus-x55sv-i-zvuk-v-naushniki.html</link><category>Мои новости</category><category>linux</category><category>ubuntu</category><category>наушники</category><category>ноутбук</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mrdaark</dc:creator><pubDate>Sun, 10 May 2009 06:20:21 PDT</pubDate><guid isPermaLink="false">http://mrdaark.ru/?p=96</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Давеча (месяц уже) поставил убунту на бук, вроде все было нормально, но тут обнаружился странный косяк, при подключении наушников нифига не отключали встроенные колонки, что прямо скажем не комильфо.</p>
<p>Немного порыскав в интернете, нашел решение. Нужно в файлик/etc/modprobe.d/alsa-base.conf добавить строчечку:</p>
<blockquote><p>options snd-hda-intel model=lenovo-ms7195-dig</p></blockquote>
<p>после чего перезагрузился и все заработало <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>PS. как вариант предлагалась еще вот такая строчка:</p>
<blockquote><p>options snd-hda-intel model=3stack-6ch</p></blockquote>
<p>PPS. пользуясь случаем попиарю блог <a title="Откровения оптимизатора" href="http://ravich.ru" target="_self">товарища seo-оптимизатора</a>, мне пофик, а ему приятно буит <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/UIGrbxqKV7l8tig3rYog1sN8Fk4/0/da"><img src="http://feedads.g.doubleclick.net/~a/UIGrbxqKV7l8tig3rYog1sN8Fk4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/UIGrbxqKV7l8tig3rYog1sN8Fk4/1/da"><img src="http://feedads.g.doubleclick.net/~a/UIGrbxqKV7l8tig3rYog1sN8Fk4/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded><description>Давеча (месяц уже) поставил убунту на бук, вроде все было нормально, но тут обнаружился странный косяк, при подключении наушников нифига не отключали встроенные колонки, что прямо скажем не комильфо.
Немного порыскав в интернете, нашел решение. Нужно в файлик/etc/modprobe.d/alsa-base.conf добавить строчечку:
options snd-hda-intel model=lenovo-ms7195-dig
после чего перезагрузился и все заработало  
PS. как вариант предлагалась еще вот такая строчка:
options [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://mrdaark.ru/ubuntu-na-asus-x55sv-i-zvuk-v-naushniki.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments></item><item><title>Перевед rss feed блога на feedburner</title><link>http://mrdaark.ru/pereved-rss-feed-bloga-na-feedburner.html</link><category>Мои новости</category><category>google</category><category>блог</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mrdaark</dc:creator><pubDate>Fri, 08 May 2009 02:25:04 PDT</pubDate><guid isPermaLink="false">http://mrdaark.ru/?p=53</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Собственно сабж, долго подбирал пароль к старому аккаунту feedburner, чтобы перенести свои фиды в аккаунт на гугле (для меня было откровением, что теперь фидбернер под крылом гугла, продались чтоль?), в итоге подобрал, перенес.</p>
<p>Раньше фид ссылался на блог на <a href="http://mr-daark.blogspot.com/" target="_blank">блоггере</a>, а теперь собственно ссылается на этот блог.</p>
<p>Редирект фида на сайте сдела с помощью вот этого плагина: <a href="http://" target="_blank">http://wordpress.org/extend/plugins/feedburner-plugin/</a>, не смотря на то что был рекомендован другой, ну не заладилось что-то с ним, или я чего-то не понял или не работает оно, хотя сделал все по инструкции.</p>
<p>Вообщем кто не понял, теперь адрес фида вот такой: <a href="http://feeds.feedburner.com/mrdaark" target="_blank">http://feeds.feedburner.com/mrdaark</a> <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Пользуйтесь на здоровье. <img src='http://mrdaark.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/RGrRXTlncd1kCufJ8ZTt6YVItM4/0/da"><img src="http://feedads.g.doubleclick.net/~a/RGrRXTlncd1kCufJ8ZTt6YVItM4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/RGrRXTlncd1kCufJ8ZTt6YVItM4/1/da"><img src="http://feedads.g.doubleclick.net/~a/RGrRXTlncd1kCufJ8ZTt6YVItM4/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded><description>Собственно сабж, долго подбирал пароль к старому аккаунту feedburner, чтобы перенести свои фиды в аккаунт на гугле (для меня было откровением, что теперь фидбернер под крылом гугла, продались чтоль?), в итоге подобрал, перенес.
Раньше фид ссылался на блог на блоггере, а теперь собственно ссылается на этот блог.
Редирект фида на сайте сдела с помощью вот этого плагина: [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://mrdaark.ru/pereved-rss-feed-bloga-na-feedburner.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">11</slash:comments></item></channel></rss>
