RSS na Blipie i Twitterze
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, 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 :
Nazwa Kanału Tytuł wiadomości - link do wiadomości
A następnie wysyła na nasze konto Twittera lub/i Blipa.
W tej wersji skrypt po prostu działa, w kolejnych wersjach będę dodawał funkcjonalności wg Waszego, swojego uznania.
#!/usr/bin/env ruby #By Harv - http://harv.pl # based on a script by Nicholas Pike - npike@npike.net require 'rss/1.0' require 'rss/2.0' require 'open-uri' # Dane dla Blipa BL_USER = '' BL_PASS = '' # Dane dla Twittera TW_USER = '' TW_PASS = '' #Zrodlo RSS source = "" BL_URL = 'http://api.blip.pl/updates' content = "" last_url = "" first_run = 1 def postToTwitter(message) begin url = URI.parse(TW_URL) req = Net::HTTP::Post.new(url.path) req.basic_auth TW_USER, TW_PASS req.set_form_data({'status' => message}) begin res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) } case res when Net::HTTPSuccess, Net::HTTPRedirection if res.body.empty? puts "Twitter nie odpowiada" else puts 'Twitter zaktualizowany' end else puts 'Aktualizacja sie nie powiodla' # res.error! end rescue #puts $! end rescue SocketError puts "Twitter jest niedostepny" end end def postToBlip(message) begin url = URI.parse(BL_URL) req = Net::HTTP::Post.new(url.path) req.basic_auth BL_USER, BL_PASS req.set_form_data({'body' => message}) begin res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) } case res when Net::HTTPSuccess, Net::HTTPRedirection if res.body.empty? puts "Blip nie odpowiada" else puts 'Blip zaktualizowany' end else puts 'Aktualizacja sie nie powiodla' # res.error! end rescue #puts $! end rescue SocketError puts "Blip jest niedostepny" end end while true open(source) do |s| content = s.read end rss = RSS::Parser.parse(content, false) if ( rss.items[0].link != last_url) puts "No match" last_url = rss.items[0].link short_url = Net::HTTP.get_response(URI.parse('http://is.gd/api.php?longurl='+last_url)).body message = rss.channel.title," ",rss.items[0].title," - #{short_url}" # Dont send a twitter message on first run of script if (first_run != 1) if (TW_USER != '') postToTwitter(message) end if (BL_USER != '') postToBlip(message) end end first_run = 0 else puts "Brak zmian" end sleep 200 end
















Dobra alternatywa dla yBlipa, tylko trzeba mieć gdzie to postawić.
Swoją drogą, dobrze dodać sobie do tego timestampy. Widzę „Blip zaktualizowany”, ale nie wiem, kiedy
Przecież te putsy są tylko do debuggowania jak je odpalasz testowo, potem to i tak działa w screenie, to mnie nie interesuje co on tam wypluwa
Ostatecznie sobie na blipie zobczę kiedy powstał zapis
O, kolejny ficzer, tym razem większe wyzwanie. Skrypt nie opublikował elementu, po prawdopodobnie wszystko przekroczyło maksymalne 160 znaków.
Rozwiązaniem byłoby skracanie linku w jakimś tinyurl przez skrypt, a następnie publikowanie skróconego linku. Może sam to dodam, jeśli dam radę
Hmm da się zrobić tylko znasz jakiś system cięcia URLi który oferuje API ? :>
Funkcjonalność dodana