<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Harv.pl &#187; projekty</title>
	<atom:link href="http://www.harv.pl/category/projekty/feed" rel="self" type="application/rss+xml" />
	<link>http://www.harv.pl</link>
	<description>Mój wycinek Internetu - newsy, przemyślenia, technologie...</description>
	<lastBuildDate>Thu, 29 Jul 2010 19:35:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Projekt lampy DIY</title>
		<link>http://www.harv.pl/projekt-lampy-diy.html</link>
		<comments>http://www.harv.pl/projekt-lampy-diy.html#comments</comments>
		<pubDate>Thu, 21 May 2009 20:47:15 +0000</pubDate>
		<dc:creator>Harv</dc:creator>
				<category><![CDATA[Na luzie]]></category>
		<category><![CDATA[nowe graty]]></category>
		<category><![CDATA[projekty]]></category>
		<category><![CDATA[diy]]></category>

		<guid isPermaLink="false">http://www.harv.pl/?p=676</guid>
		<description><![CDATA[Odkąd przeprowadziłem się do nowego pokoju brakowało mi lampki nocnej, gdy wpadłem na projekt izrealskich disignerów iwłączył mi się tryb &#8216;I want it NOW&#8217;. Po prawie dwóch miesiącach myślenia, szukania części powstało oto to dziwactwo :    Zawór oczywiście działa jako wyłącznik, w planach, wersja 2.0 z zamontowanym ściemniaczem]]></description>
			<content:encoded><![CDATA[<p>Odkąd przeprowadziłem się do nowego pokoju brakowało mi lampki nocnej, gdy wpadłem na projekt izrealskich disignerów iwłączył mi się tryb &#8216;I want it NOW&#8217;. Po prawie dwóch miesiącach myślenia, szukania części powstało oto to dziwactwo : </p>
<p><a class="tt-flickr tt-flickr-Medium" title="Lampa ver. 1.0" href="http://www.flickr.com/photos/harvpl/3552499398/"><img class="alignnone" src="http://farm4.static.flickr.com/3325/3552499398_0db05996a6.jpg" alt="Lampa ver. 1.0" width="474" height="500" /></a> </p>
<p>Zawór oczywiście działa jako wyłącznik, w planach, wersja 2.0 z zamontowanym ściemniaczem <img src='http://www.harv.pl/a/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.harv.pl/projekt-lampy-diy.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Last.fm na Twitterze i Blipie w PHP</title>
		<link>http://www.harv.pl/lastfm-na-twitterze-i-blipie-w-php.html</link>
		<comments>http://www.harv.pl/lastfm-na-twitterze-i-blipie-w-php.html#comments</comments>
		<pubDate>Sun, 23 Nov 2008 09:04:49 +0000</pubDate>
		<dc:creator>Harv</dc:creator>
				<category><![CDATA[projekty]]></category>
		<category><![CDATA[Blip]]></category>
		<category><![CDATA[Last.fm]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.harv.pl/?p=462</guid>
		<description><![CDATA[Jakiś czas temu opublikowałem swoją wersję skryptu wyświetlającego nasze ulubione utwory z Last.fm na Blipie i Twitterze.  Jako, że pojawiło się zapotrzebowanie na wersję w PHP, postanowiłem go szybko przepisać. Nie jest to 100% odpowiednik wersji Ruby, ale chyba będzie spełniał swoje zadanie. Skrypt używa pliku tymczasowego do przechowywania ostatnich danych z Last.fm, aby uniknąć [...]]]></description>
			<content:encoded><![CDATA[<p>Jakiś czas temu opublikowałem <a href="http://www.harv.pl/2008/11/lastfm-na-twitterze-i-blipie/">swoją wersję skryptu</a> wyświetlającego nasze ulubione utwory z <a href="http://last.fm">Last.fm</a> na <a href="http://blip.pl">Blipie</a> i <a href="http://www.twitter.com">Twitterze</a>.  Jako, że pojawiło się zapotrzebowanie na wersję w PHP, postanowiłem go szybko przepisać.</p>
<p>Nie jest to 100% odpowiednik wersji Ruby, ale chyba będzie spełniał swoje zadanie. Skrypt używa pliku tymczasowego do przechowywania ostatnich danych z Last.fm, aby uniknąć nieskończonej pętli i wysyłania jednego statusu w kółko. Dlatego też należy nadać odpowiednie prawa katalogowi w którym ten plik będzie tworzony, jego ścieżkę możecie określić zmienną w &#8216;części konfiguracyjnej&#8217; skryptu. Jako parsera XML użyłem gotowej klasy z <a href="http://pl2.php.net/manual/en/function.xml-parse.php#83416">php.net</a>, także nie zapomnijcie wypakować <a title="Last.fm 2 Blip,Twitter" href="http://www.harv.pl/a/wp-content/uploads/2008/11/last2blip.zip">wszystkich plików z paczki</a> do katalogu w którym będzie działał skrypt. </p>
<p>Pamiętajcie żeby przed każdym odpaleniem usunąć plik tymczasowy, na tej podstawie skrypt orientuje się czy jest odpalony po raz pierwszy, czy nie. Chyba, że chcecie żeby przy pierwszym przebiegu już zaktualizował microblogi.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #666666; font-style: italic;">/*
Last.fm 2 Twitter and Blip Script 
by Harv - http://harv.pl
      v.0.1
*/</span>
<span style="color: #b1b100;">include_once</span> <span style="color: #0000ff;">&quot;xx_xml.php&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Dane dla blipa
</span><span style="color: #000088;">$bl_user</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$bl_pass</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">#Dane dla Twittera
</span><span style="color: #000088;">$tw_user</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$tw_pass</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">#User Last.fm
</span><span style="color: #000088;">$lfm_user</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">#Sciezka pliku tmp
</span><span style="color: #000088;">$tmp_fn</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;lsfm_tw&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Adresy API etc
</span><span style="color: #000088;">$lfm_url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://ws.audioscrobbler.com/1.0/user/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$lfm_user</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/recentlovedtracks.xml'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$tw_url</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://twitter.com/statuses/update.xml'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$bl_url</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://api.blip.pl/updates'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> postTwitter<span style="color: #009900;">&#40;</span><span style="color: #000088;">$message</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$tw_user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tw_pass</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tw_url</span> <span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #000088;">$curl_handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_URL<span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$tw_url</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_CONNECTTIMEOUT<span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_POST<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_POSTFIELDS<span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;status=<span style="color: #006699; font-weight: bold;">$message</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_USERPWD<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$tw_user</span>:<span style="color: #006699; font-weight: bold;">$tw_pass</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$buffer</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// check for success or failure</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$buffer</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Twitter success'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$buffer</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> postBlip<span style="color: #009900;">&#40;</span><span style="color: #000088;">$message</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$bl_user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bl_pass</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bl_url</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$curl_handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_URL<span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$bl_url</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_CONNECTTIMEOUT<span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_POST<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_POSTFIELDS<span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;body=<span style="color: #006699; font-weight: bold;">$message</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #339933;">,</span>CURLOPT_USERPWD<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$bl_user</span>:<span style="color: #006699; font-weight: bold;">$bl_pass</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$buffer</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl_handle</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// check for success or failure</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$buffer</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Blip success'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$buffer</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Czyta XML
</span><span style="color: #000088;">$raw</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> xx_xml<span style="color: #009900;">&#40;</span><span style="color: #000088;">$lfm_url</span> <span style="color: #339933;">,</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$last_url</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$raw</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span> <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'recentlovedtracks|track|url'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'data'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">;</span>
<span style="color: #000088;">$last_artist</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$raw</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span> <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'recentlovedtracks|track|artist'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'data'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">;</span>
<span style="color: #000088;">$last_track</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$raw</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span> <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'recentlovedtracks|track|name'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'data'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">;</span>
<span style="color: #000088;">$lat_date</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$raw</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span> <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'recentlovedtracks|track|date'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'data'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Skroc URL
</span><span style="color: #000088;">$sh_url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://is.gd/api.php?longurl='</span><span style="color: #339933;">.</span><span style="color: #000088;">$last_url</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$short_url</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sh_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Wiadomosc
</span><span style="color: #000088;">$message</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Last.fm: '</span><span style="color: #339933;">.</span><span style="color: #000088;">$last_artist</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' - '</span><span style="color: #339933;">.</span><span style="color: #000088;">$last_track</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' '</span><span style="color: #339933;">.</span><span style="color: #000088;">$short_url</span> <span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Pierwszy raz ? 
</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp_fn</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #000088;">$fh</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp_fn</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'r'</span><span style="color: #009900;">&#41;</span> or <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Can't open file&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$tmp_data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #339933;">,</span> <span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp_fn</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp_data</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$last_url</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tw_user</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
      postTwitter<span style="color: #009900;">&#40;</span><span style="color: #000088;">$message</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bl_user</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
      postBlip<span style="color: #009900;">&#40;</span><span style="color: #000088;">$message</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
    <span style="color: #000088;">$fh</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp_fn</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w+'</span><span style="color: #009900;">&#41;</span> or <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Can't open file&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">fwrite</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #339933;">,</span> <span style="color: #000088;">$last_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">else</span> 
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Bez zmian'</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #666666; font-style: italic;">#Pliku nie ma, pierwsze odpalenie
</span>  <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$fh</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp_fn</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w+'</span><span style="color: #009900;">&#41;</span> or <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Can't open file&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">fwrite</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #339933;">,</span> <span style="color: #000088;">$last_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'First Run'</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
&nbsp;
  <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Skrypt  ten, w przeciwieństwie do tego napisanego w Ruby, oczywiście nie rezyduje w pamięci monitorując stale zmiany na Last.fm i potrzebuje pomocy np. crona, aby aktualizować dane na bieżąco.  Przykładowy zapis crontab uruchamiający skrypt co 2 minuty:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">*/</span><span style="color: #000000;">2</span> <span style="color: #000000; font-weight: bold;">*</span>  <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span>   root    <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">lynx</span> <span style="color: #660033;">-source</span> http:<span style="color: #000000; font-weight: bold;">//</span>_adres skryptu_</pre></div></div>

<p>W razie jakichkolwiek problemów postaram się pomóc, potestujcie i wytknijcie błędy, które z pewnością popełniłem.</p>
<h3><a href='http://www.harv.pl/a/wp-content/uploads/2008/11/last2blip.zip'>Pobierz paczkę ze skryptem</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.harv.pl/lastfm-na-twitterze-i-blipie-w-php.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>RSS na Blipie i Twitterze</title>
		<link>http://www.harv.pl/rss-na-blipie-i-twitterze.html</link>
		<comments>http://www.harv.pl/rss-na-blipie-i-twitterze.html#comments</comments>
		<pubDate>Tue, 11 Nov 2008 19:13:33 +0000</pubDate>
		<dc:creator>Harv</dc:creator>
				<category><![CDATA[projekty]]></category>
		<category><![CDATA[Blip]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.harv.pl/?p=404</guid>
		<description><![CDATA[Idąc za ciosem, skoro udostępniłem skrypt łączący profil z last.fm z Blipem, pomyślałem, że mógłbym napisać jeszcze jeden, bardziej uniwersalny, który będzie czerpał informacje po prostu z kanału RSS. W ten sposób możecie zautomatyzować promocję swoich treści, informować znajomych o aktualizacjach na innych swoich blogach itp, możliwości są wręcz nieograniczone. Tak jak w poprzednim skrypcie, [...]]]></description>
			<content:encoded><![CDATA[<p>Idąc za ciosem, skoro <a href="http://www.harv.pl/2008/11/lastfm-na-twitterze-i-blipie/">udostępniłem skrypt łączący profil z last.fm z Blipem</a>, pomyślałem, że mógłbym napisać jeszcze jeden, bardziej uniwersalny, który będzie czerpał informacje po prostu z kanału RSS. W ten sposób możecie zautomatyzować promocję swoich treści, informować znajomych o aktualizacjach na innych swoich blogach itp, możliwości są wręcz nieograniczone.</p>
<p>Tak jak w poprzednim skrypcie, zmiany są monitorowane w odstępach pięciominutowych, jeśli nastąpi jakaś aktualizacja kanału RSS generuje on wiadomość o następującej składni :</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">Nazwa Kanału  Tytuł wiadomości - link do wiadomości</pre></div></div>

<p>A następnie wysyła na nasze konto Twittera lub/i Blipa.</p>
<p>W tej wersji skrypt po prostu działa, w kolejnych wersjach będę dodawał funkcjonalności wg Waszego, swojego uznania.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#008000; font-style:italic;">#By Harv - http://harv.pl</span>
<span style="color:#008000; font-style:italic;"># based on a script by  Nicholas Pike - npike@npike.net</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rss/1.0'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rss/2.0'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'open-uri'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Dane dla Blipa</span>
BL_USER = <span style="color:#996600;">''</span>
BL_PASS = <span style="color:#996600;">''</span>
<span style="color:#008000; font-style:italic;"># Dane dla Twittera</span>
TW_USER = <span style="color:#996600;">''</span>
TW_PASS = <span style="color:#996600;">''</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#Zrodlo RSS</span>
source = <span style="color:#996600;">&quot;&quot;</span> 
&nbsp;
BL_URL  = <span style="color:#996600;">'http://api.blip.pl/updates'</span>
&nbsp;
content = <span style="color:#996600;">&quot;&quot;</span>
last_url = <span style="color:#996600;">&quot;&quot;</span>
first_run = <span style="color:#006666;">1</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> postToTwitter<span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">begin</span>
    url = <span style="color:#CC00FF; font-weight:bold;">URI</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>TW_URL<span style="color:#006600; font-weight:bold;">&#41;</span>
    req = <span style="color:#6666ff; font-weight:bold;">Net::HTTP::Post</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>url.<span style="color:#9900CC;">path</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    req.<span style="color:#9900CC;">basic_auth</span> TW_USER, TW_PASS
    req.<span style="color:#9900CC;">set_form_data</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'status'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> message<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">begin</span>
      res = <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>url.<span style="color:#9900CC;">host</span>, url.<span style="color:#9900CC;">port</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">start</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>http<span style="color:#006600; font-weight:bold;">|</span> http.<span style="color:#9900CC;">request</span><span style="color:#006600; font-weight:bold;">&#40;</span>req<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#9966CC; font-weight:bold;">case</span> res
        <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#6666ff; font-weight:bold;">Net::HTTPSuccess</span>, <span style="color:#6666ff; font-weight:bold;">Net::HTTPRedirection</span>
          <span style="color:#9966CC; font-weight:bold;">if</span> res.<span style="color:#9900CC;">body</span>.<span style="color:#9900CC;">empty</span>?
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Twitter nie odpowiada&quot;</span>
&nbsp;
          <span style="color:#9966CC; font-weight:bold;">else</span>
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'Twitter zaktualizowany'</span>
&nbsp;
          <span style="color:#9966CC; font-weight:bold;">end</span>
        <span style="color:#9966CC; font-weight:bold;">else</span>
          <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'Aktualizacja sie nie powiodla'</span>
          <span style="color:#008000; font-style:italic;"># res.error!</span>
&nbsp;
        <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span>
      <span style="color:#008000; font-style:italic;">#puts $!</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">rescue</span> SocketError
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Twitter jest niedostepny&quot;</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> postToBlip<span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">begin</span>
    url = <span style="color:#CC00FF; font-weight:bold;">URI</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>BL_URL<span style="color:#006600; font-weight:bold;">&#41;</span>
    req = <span style="color:#6666ff; font-weight:bold;">Net::HTTP::Post</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>url.<span style="color:#9900CC;">path</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    req.<span style="color:#9900CC;">basic_auth</span> BL_USER, BL_PASS
    req.<span style="color:#9900CC;">set_form_data</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'body'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> message<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">begin</span>
      res = <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>url.<span style="color:#9900CC;">host</span>, url.<span style="color:#9900CC;">port</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">start</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>http<span style="color:#006600; font-weight:bold;">|</span> http.<span style="color:#9900CC;">request</span><span style="color:#006600; font-weight:bold;">&#40;</span>req<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#9966CC; font-weight:bold;">case</span> res
        <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#6666ff; font-weight:bold;">Net::HTTPSuccess</span>, <span style="color:#6666ff; font-weight:bold;">Net::HTTPRedirection</span>
          <span style="color:#9966CC; font-weight:bold;">if</span> res.<span style="color:#9900CC;">body</span>.<span style="color:#9900CC;">empty</span>?
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Blip nie odpowiada&quot;</span>
&nbsp;
          <span style="color:#9966CC; font-weight:bold;">else</span>
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'Blip zaktualizowany'</span>
&nbsp;
          <span style="color:#9966CC; font-weight:bold;">end</span>
        <span style="color:#9966CC; font-weight:bold;">else</span>
          <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'Aktualizacja sie nie powiodla'</span>
          <span style="color:#008000; font-style:italic;"># res.error!</span>
&nbsp;
        <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span>
      <span style="color:#008000; font-style:italic;">#puts $!</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">rescue</span> SocketError
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Blip jest niedostepny&quot;</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">while</span> <span style="color:#0000FF; font-weight:bold;">true</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>source<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>s<span style="color:#006600; font-weight:bold;">|</span> content = s.<span style="color:#9900CC;">read</span> <span style="color:#9966CC; font-weight:bold;">end</span>
rss = <span style="color:#6666ff; font-weight:bold;">RSS::Parser</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>content, <span style="color:#0000FF; font-weight:bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span> rss.<span style="color:#9900CC;">items</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">link</span> != last_url<span style="color:#006600; font-weight:bold;">&#41;</span>
   <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;No match&quot;</span>
&nbsp;
   last_url = rss.<span style="color:#9900CC;">items</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">link</span>
   short_url = <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">get_response</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">URI</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'http://is.gd/api.php?longurl='</span><span style="color:#006600; font-weight:bold;">+</span>last_url<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">body</span>
&nbsp;
    message = rss.<span style="color:#9900CC;">channel</span>.<span style="color:#9900CC;">title</span>,<span style="color:#996600;">&quot; &quot;</span>,rss.<span style="color:#9900CC;">items</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">title</span>,<span style="color:#996600;">&quot; - #{short_url}&quot;</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Dont send a twitter message on first run of script</span>
   <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>first_run != <span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>TW_USER != <span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        postToTwitter<span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span>
       <span style="color:#9966CC; font-weight:bold;">end</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>BL_USER != <span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        postToBlip<span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
   <span style="color:#9966CC; font-weight:bold;">end</span>
   first_run = <span style="color:#006666;">0</span>
<span style="color:#9966CC; font-weight:bold;">else</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Brak zmian&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#CC0066; font-weight:bold;">sleep</span> <span style="color:#006666;">200</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.harv.pl/rss-na-blipie-i-twitterze.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Last.fm na Twitterze i Blipie</title>
		<link>http://www.harv.pl/lastfm-na-twitterze-i-blipie.html</link>
		<comments>http://www.harv.pl/lastfm-na-twitterze-i-blipie.html#comments</comments>
		<pubDate>Mon, 10 Nov 2008 15:03:03 +0000</pubDate>
		<dc:creator>Harv</dc:creator>
				<category><![CDATA[projekty]]></category>
		<category><![CDATA[Blip]]></category>
		<category><![CDATA[Last.fm]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.harv.pl/?p=393</guid>
		<description><![CDATA[Pozwoliłem sobie zmodyfikować skrypt w Ruby autorstwa Nicholasa Pike, wyświetlający nasze ulubione piosenki z last.fm na Twiterze, dodając mu także obsługę naszego rodzimego Blipa. Skrypt sprawdza co 5 min czy nie zaznaczyliśmy nowej piosenki jako &#8216;lubię&#8216;, jeśli odnajdzie taką zmianę zaktualizuje nasz status na obu mikroblogach. Jeśli chcemy korzystać tylko z jednego z systemów wystarczy [...]]]></description>
			<content:encoded><![CDATA[<p>Pozwoliłem sobie zmodyfikować skrypt w Ruby autorstwa <a href="http://blog.npike.net/2008/03/26/twitter-lastfm-a-quick-ruby-script/">Nicholasa Pike</a>, wyświetlający nasze ulubione piosenki z <a href="http://last.fm">last.fm</a> na <a href="http://twitter.com">Twiterze</a>, dodając mu także obsługę naszego rodzimego <a href="http://blip.pl">Blipa</a>. Skrypt sprawdza co 5 min czy nie zaznaczyliśmy nowej piosenki jako &#8216;<strong>lubię</strong>&#8216;, jeśli odnajdzie taką zmianę zaktualizuje nasz status na obu mikroblogach.</p>
<p>Jeśli chcemy korzystać tylko z jednego z systemów wystarczy pozostawić puste pola nazwy użytkownika i hasło dla danego konta , a skrypt nie będzie próbował aktualizować danego mikrobloga.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#008000; font-style:italic;"># @author:  Nicholas Pike - npike@npike.net</span>
<span style="color:#008000; font-style:italic;">#blip-mod: Harv - http://harv.pl </span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'net/http'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rexml/document'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Dane dla Twittera</span>
TW_USER = <span style="color:#996600;">''</span>
TW_PASS = <span style="color:#996600;">''</span>
<span style="color:#008000; font-style:italic;"># Dane dla Blipa</span>
BL_USER = <span style="color:#996600;">''</span>
BL_PASS = <span style="color:#996600;">''</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Nazwa użytkownika w Last.fm</span>
LF_USER = <span style="color:#996600;">&quot;&quot;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># DO NOT CHANGE BELOW THIS</span>
TW_URL  = <span style="color:#996600;">'http://twitter.com/statuses/update.xml'</span>
BL_URL  = <span style="color:#996600;">'http://api.blip.pl/updates'</span>
LAST_FM_URL = <span style="color:#996600;">&quot;http://ws.audioscrobbler.com/1.0/user/#{LF_USER}/recentlovedtracks.xml&quot;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># temp variables</span>
last_url = <span style="color:#996600;">&quot;&quot;</span>
first_run = <span style="color:#006666;">1</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> postToTwitter<span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">begin</span>
    url = <span style="color:#CC00FF; font-weight:bold;">URI</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>TW_URL<span style="color:#006600; font-weight:bold;">&#41;</span>
    req = <span style="color:#6666ff; font-weight:bold;">Net::HTTP::Post</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>url.<span style="color:#9900CC;">path</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    req.<span style="color:#9900CC;">basic_auth</span> TW_USER, TW_PASS
    req.<span style="color:#9900CC;">set_form_data</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'status'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> message<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">begin</span>
      res = <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>url.<span style="color:#9900CC;">host</span>, url.<span style="color:#9900CC;">port</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">start</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>http<span style="color:#006600; font-weight:bold;">|</span> http.<span style="color:#9900CC;">request</span><span style="color:#006600; font-weight:bold;">&#40;</span>req<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#9966CC; font-weight:bold;">case</span> res
        <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#6666ff; font-weight:bold;">Net::HTTPSuccess</span>, <span style="color:#6666ff; font-weight:bold;">Net::HTTPRedirection</span>
          <span style="color:#9966CC; font-weight:bold;">if</span> res.<span style="color:#9900CC;">body</span>.<span style="color:#9900CC;">empty</span>?
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Twitter nie odpowiada&quot;</span>
&nbsp;
          <span style="color:#9966CC; font-weight:bold;">else</span>
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'Twitter zaktualizowany'</span>
&nbsp;
          <span style="color:#9966CC; font-weight:bold;">end</span>
        <span style="color:#9966CC; font-weight:bold;">else</span>
          <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'Aktualizacja sie nie powiodla'</span>
          <span style="color:#008000; font-style:italic;"># res.error!</span>
&nbsp;
        <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span>
      <span style="color:#CC0066; font-weight:bold;">puts</span> $!
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">rescue</span> SocketError
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Twitter jest niedostepny&quot;</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> postToBlip<span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">begin</span>
    url = <span style="color:#CC00FF; font-weight:bold;">URI</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>BL_URL<span style="color:#006600; font-weight:bold;">&#41;</span>
    req = <span style="color:#6666ff; font-weight:bold;">Net::HTTP::Post</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>url.<span style="color:#9900CC;">path</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    req.<span style="color:#9900CC;">basic_auth</span> BL_USER, BL_PASS
    req.<span style="color:#9900CC;">set_form_data</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'body'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> message<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">begin</span>
      res = <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>url.<span style="color:#9900CC;">host</span>, url.<span style="color:#9900CC;">port</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">start</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>http<span style="color:#006600; font-weight:bold;">|</span> http.<span style="color:#9900CC;">request</span><span style="color:#006600; font-weight:bold;">&#40;</span>req<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#9966CC; font-weight:bold;">case</span> res
        <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#6666ff; font-weight:bold;">Net::HTTPSuccess</span>, <span style="color:#6666ff; font-weight:bold;">Net::HTTPRedirection</span>
          <span style="color:#9966CC; font-weight:bold;">if</span> res.<span style="color:#9900CC;">body</span>.<span style="color:#9900CC;">empty</span>?
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Blip nie odpowiada&quot;</span>
&nbsp;
          <span style="color:#9966CC; font-weight:bold;">else</span>
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'Blip zaktualizowany'</span>
&nbsp;
          <span style="color:#9966CC; font-weight:bold;">end</span>
        <span style="color:#9966CC; font-weight:bold;">else</span>
          <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'Aktualizacja sie nie powiodla'</span>
          <span style="color:#008000; font-style:italic;"># res.error!</span>
&nbsp;
        <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span>
      <span style="color:#008000; font-style:italic;">#puts $!</span>
&nbsp;
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">rescue</span> SocketError
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Blip jest niedostepny&quot;</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">while</span> <span style="color:#0000FF; font-weight:bold;">true</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># get the XML data as a string</span>
xml_data = <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">get_response</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">URI</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>LAST_FM_URL<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">body</span>
doc = <span style="color:#6666ff; font-weight:bold;">REXML::Document</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>xml_data<span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span> doc.<span style="color:#9900CC;">elements</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;recentlovedtracks/track[1]/url&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">text</span> != last_url<span style="color:#006600; font-weight:bold;">&#41;</span>
   <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;No match&quot;</span>
&nbsp;
   last_url = doc.<span style="color:#9900CC;">elements</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;recentlovedtracks/track[1]/url&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">text</span>
   last_artist = doc.<span style="color:#9900CC;">elements</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;recentlovedtracks/track[1]/artist&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">text</span>
   last_name = doc.<span style="color:#9900CC;">elements</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;recentlovedtracks/track[1]/name&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">text</span> 
&nbsp;
   short_url = <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">get_response</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">URI</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'http://is.gd/api.php?longurl='</span><span style="color:#006600; font-weight:bold;">+</span>last_url<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">body</span>
&nbsp;
   message = <span style="color:#996600;">&quot;Last.FM: #{last_name} - #{last_artist} <span style="color:#000099;">\n</span><span style="color:#000099;">\n</span>#{short_url}&quot;</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Dont send a twitter message on first run of script</span>
   <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>first_run != <span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>TW_USER != <span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        postToTwitter<span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span>
       <span style="color:#9966CC; font-weight:bold;">end</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>BL_USER != <span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        postToBlip<span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
   <span style="color:#9966CC; font-weight:bold;">end</span>
   first_run = <span style="color:#006666;">0</span>
<span style="color:#9966CC; font-weight:bold;">else</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Brak zmian&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#CC0066; font-weight:bold;">sleep</span> <span style="color:#006666;">200</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Czekam na komentarze, jeśli będzie zapotrzebowanie mogę w wolnej chwili przepisać to do php.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.harv.pl/lastfm-na-twitterze-i-blipie.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Automatyzacja cdrecord pod Linuxem</title>
		<link>http://www.harv.pl/automatyzacja-cdrecord-pod-linuxem.html</link>
		<comments>http://www.harv.pl/automatyzacja-cdrecord-pod-linuxem.html#comments</comments>
		<pubDate>Sat, 18 Oct 2008 23:18:00 +0000</pubDate>
		<dc:creator>Harv</dc:creator>
				<category><![CDATA[projekty]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://harv.sevenstring.pl/?p=158</guid>
		<description><![CDATA[Odkąd zastąpiłem puszkowego PCta notebookiem, mój domowy serwer musi spełniać coraz  to więcej funkcji. Jedną z nich stało się nagrywanie płyt CD , DVD, jako , że większość danych trzymam na dysku serwera głupotą byłoby przesyłanie 4,7 GB danych przez WiFi tylko po to żeby je wypalić.  Jako że serwer działa tylko w trybie konsoli, [...]]]></description>
			<content:encoded><![CDATA[<p>Odkąd zastąpiłem puszkowego PCta notebookiem, mój domowy serwer musi spełniać coraz  to więcej funkcji. Jedną z nich stało się nagrywanie płyt CD , DVD, jako , że większość danych trzymam na dysku serwera głupotą byłoby przesyłanie 4,7 GB danych przez WiFi tylko po to żeby je wypalić.  Jako że serwer działa tylko w trybie konsoli, o programach typu k3b, gnomebaker trzeba było zapomnieć i sięgnąć po cdrecord.</p>
<p>Cdrecord to konsolowe narzędzie wykorzystujące pakiet wodim do nagrywania płyt CD , DVD jednak nagrywa tylko obrazy płyt, które trzeba sobie przygotować samemu np za pomocą <strong>mkisofs</strong> albo <strong>dd</strong>.  Jednak zapamiętywanie ich składni, wykonywanie tych poleceń po kolei, do tego przy większej ilości kopii jest dosyć kłopotliwe.</p>
<p>Nieprzerwanie nękany tymi niedogodnościami postanowiłem popełnić prosty skrypt shellowy automatyzujący część tych zadań, tak abym nie musiał pamiętać komend, składni, switchów etc. Skrypt testowałem tylko na sobie, stąd oznaczony jest wersją 0.1 beta, dodatkowo to pierwsza moja przygoda z dłuższymi skryptami shellowymi więc za wszelkie komentarze będę wdzięczny.</p>
<p>Do rzeczy jednak. Co ten skrypt potrafi ? Przede wszystkim to czego brakowało mi w windowsowym CDBurnerze XP &#8211; skopiować płytę kilka razy. Ale po kolei.</p>
<h3><strong>Skrypt możemy uruchomić z czterema przełącznikami:</strong></h3>
<ul>
<li>-c &#8211; kopia płyty (zadaną ilość razy)</li>
<li>-r &#8211; nagranie gotowego pliku obrazu(zadaną ilość razy)</li>
<li>-b &#8211; stworzenie obrazu ze wskazanego folderu i wypalenie go (zadaną ilość razy)</li>
<li>-batch &#8211; nagranie po kolei wszystkich obrazów iso w zadanym folderze</li>
</ul>
<p>Przed wykonaniem nagrania, skrypt sprawdza czy na pewno w napędzie znajduje się pusta płyta (zdarzyło mi się przez przypadek jakimś cudem nadpisać nagrany nośnik)</p>
<p><strong>Skrypt posiada kilka opcji konfiguracyjnych  w nagłówku:</strong></p>
<div class="pre">#Plik tymczasowy<br />
tf=/tmp/`date +%s`.iso</div>
<p>Tu wybieramy gdzie mają się zapisywać tymczasowe pliki, które powstają podczas kopiowania i nagrywania folderów, oraz jak mają się nazywać. Domyślnie nazwą pliku jest ilość sekund od 1970 roku;)</p>
<div class="pre">#Adres napedu<br />
DEV=/dev/hdc</div>
<p>Adres napędu optycznego.  Ten sam odczytuje i nagrywa płyty w przypadku kopiowania.</p>
<div class="pre">#Pytaj o parametry nagrywania t/n (domyslnie nie)<br />
PARAMS=N</div>
<p>Jeśli wybierzemy &#8216;T&#8217; przed każdym nagraniem skrypt będzie pytał o parametry cdrecord&#8217;a.  Przy wybraniu &#8216;N&#8217;, cdrecord będzie pracował z domyślną prędkością i parametrami -v -eject .</p>
<h3>OBSŁUGA</h3>
<p>Zakładam, że mkisofs, cdrecord, dd jest już zainstalowane (tutorial jak te pakiety zainstalować i obsługiwać za jakiś czas). Kopiujemy plik na naszą linuxową maszynę, nadajemy mu atrybut wykonywalności</p>
<div class="pre">chmod +x nagraj</div>
<p>Teraz wystarczy go wykonać z odpowiednim parametrem np:</p>
<div class="pre">./nagraj -c</div>
<p>I postępować wg. poleceń na ekranie <img src='http://www.harv.pl/a/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>BUGI</h3>
<p>Pliki obrazów iso przy nagrywaniu &#8216;masowym&#8217; nie mogą zawierać w nazwie spacji bo skrypt się wywali <img src='http://www.harv.pl/a/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>DOWNLOAD</h3>
<p><a href="http://harv.pl/a/wp-content/uploads/2008/10/nagraj">CD/DVD Burner by Harv</a></p>
<p>Za wszelkie komentarze, propozycje funkcji , zgłoszenia błędów itp będę wdzięczny.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.harv.pl/automatyzacja-cdrecord-pod-linuxem.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
