http://esiyo.net - uordek.essiyoo.each { |yazi| esiyo.net << yazi }

Hpricot Örneği

19.09.2007, yazan Tankut ŞENTÜRK

Merhabalar,

Geçmiş zaman olurki bir proje için internette yayınlanan videoların kaç kez görüntülendiğini öğrenmek isteyen arkadaşlar ile tanıştım, çok ısrar ettiler yaptım. Bazı siteler için süper basit ve hızlı olurken bazıları için uzun sürdü ama 5 site için görüntüleme bilgilerini 2 saat gibi uzun bir sürede yapmayı başardım. Öff bee çok uzun sürmüş harbiden... şimdi yazınca daha da uzun geldi... aman aman bir daha yapmam valla... bu nedenle sizler de tekrar tekrar uğraşmayın diye bu Tankut kulunuz bu yazıyı yazıyor. Sırf sizler için, reklamları tıklamanız için değil, adımı ağzınızda sakız yapmanız için değil.. sadece siz uğraşmayın diye.. heyttt bee hizmet etmeye geldik diye siyasi bir yaklaşım içerisinde bulunan ve hiç birşey yapmayanlar utansın..

Öfff öff gene gereksiz yazdım işte örnekler :)

Öncelikle bulduğumuz gösterim sayılarını (view count) html veya "," gibi karakterler ayırmak için bir methoda ihtiyacımız var. İşte 'remove_char' methodu tam bu noktada isteklerimizi karşılıyor.

def remove_char(number)
  ret = ''
  number.to_s.split(//).each do |char|
    ret += char if char.to_i.to_s == char
  end
  ret
end

Öncelik google kardeşimizin olsun, google kardeşimiz video url'i aslında frame'lerden oluşuyor. Ve gösterim sayısının (video view count) bulunduğu frame'i üstün araştırmalarımın sonucunda buldum... :) url'de 'videoplay' yerine 'videohosted' yazıyorsunuz oldu bitti maşallah :).

require 'open-uri'
require 'hipricot'

# Sassy Girl (Chun-Hyang) Episode 5
video_url = 'http://video.google.com/videoplay?docid=1197987351381288347'
google_video = Hpricot(open(video_url.gsub('videoplay','videohosted')))
temp = google_video.search("//table[@id='statsshowmore']")
google_video_view = Hpricot(temp.innerHTML).search("//td")
view_count = remove_char(google_video_view[0]).to_i
puts view_count

Sonraki örneğimiz myspace'den olsun...

# Internet People!
require 'open-uri'
require 'hipricot'

video_url = 'http://vids.myspace.com/index.cfm?fuseaction=vids.individual&VideoID=2057681175'
myspace_video = Hpricot(open(video_url))
temp = myspace_video.search("//div[@class='userinfo']")
myspace_video_view = Hpricot(temp.innerHTML).search("//span")
view_count = remove_char(myspace_video_view[2]).to_i
puts view_count

Vur patlasın çal yahoo'dan gelsin örnek..!

# Eastern Promises
require 'open-uri'
require 'hipricot'

video_url = 'http://video.yahoo.com/video/play?vid=1145798&fr=&cache=1'
yahoo_video = Hpricot(open(video_site.url))
temp = yahoo_video.search("//div[@class='vd']")
yahoo_video_view = Hpricot(temp.innerHTML).search("//span[@class='bold']").inner_text
view_count = remove_char(yahoo_video_view).to_i
puts view_count

En son youtube kardeşe bakalım; ama bir saniye youtube kardeşle uğraşmaya gerek yok.. :)
"gem install youtube" yazın evinize gelsin :)

require 'youtube'

Kolay gelsin..

Bağlı olduğu kategoriler; Bilgisayar, Ruby (Ruby on Rails)

8 Yorum

  1. Arslan Topçu

    Selamlar windows ta bu gem paketlerinin kurulumu için

    gem install hpricot

    yazdığımda internetten indirip kuruyor. Ancak ruby den require ‘hpricot’ eklediğimde bana şu hatayı veriyor

    :1: no such file to load — hpricot (LoadError)

    Acaba yüklemeyi tam olarak yapamadımmı …

  2. Tankut ŞENTÜRK

    Selamlar Arslan,

    ‘ yerine ” kullanmalısın, sanırım ben yanlış yapmışım :) veya ruby’nin yeni versiyonlarında bu şekilde bir sorun oluşuyor tam olarak bilemiyorum, araştırmak lazım.

    require “hpricot”

    Eğer sorun halen devam ederse;

    gem install hpricot –include-dependencies

  3. Arslan Topçu

    dediğiniz iki yoluda denedim ama yine olmadı

    gem install hpricot –include-dependencies
    yapınca

    Select which gem to install for your platform (i386-mswin32)
    1. hpricot 0.6 (mswin32)
    2. hpricot 0.6 (jruby)
    3. hpricot 0.6 (ruby)
    4. hpricot 0.6 (jruby)
    5. hpricot 0.6 (mswin32)
    6. hpricot 0.6 (ruby)
    7. Skip this gem
    8. Cancel installation

    geliyor bunlarda 1 seçince

    Successfully installed hpricot-0.6-mswin32
    Installing ri documentation for hpricot-0.6-mswin32..
    Installing RDoc documentation for hpricot-0.6-mswin32
    yazıyor ama yine olmuyor

    3 veya 6 yı seçincede

    > 6
    Building native extensions. This could take a while…
    ERROR: While executing gem … (Gem::Installer::ExtensionBuildError)
    ERROR: Failed to build gem native extension.

    ruby extconf.rb install hpricot -include-dependencies
    checking for main() in c.lib… no
    creating Makefile

    nmake
    ‘nmake’ iç ya da dıs komut, çalıstırılabilir
    program ya da toplu is dosyası olarak tanınmıyor.

    Gem files will remain installed in C:/nclude-dependencies/gems/hpricot-0.6 for i
    nspection.
    Results logged to C:/nclude-dependencies/gems/hpricot-0.6/ext/hpricot_scan/gem_m
    ake.out

    Gibi Hataları alıyorum….

  4. Tankut ŞENTÜRK

    Selam Arslan,

    Himmm, ilginç bir hata..

    Peki “Ruby”nin kurulu oldugu (varsayılan c:\ruby) dizinin içerisinde “\lib\ruby\gems\1.8\gems\” içerisinde “hpricot” dizinini görebiliyor musun ? Eğer bu klasör var ise içerisindeki dosyaları kontrol et. Bu “hpricot-0.6-mswin32″ dizinin altında “test” dizini var, bu dizin altındaki test dosyalarını çalıştır.

    Eger sorun çözülmezse, sanırım 2 tane ruby kurulumu yapmışsın, “Instant Rails” ile gelen Ruby ile kendi kurduğun Ruby birbirlerine karışıyor, “path” tanımlarını kontrol etmelisin.

    Eğer sorun çözülmezse hata oluştuğu andaki tüm stacktrace’i göndermeni istiyorum.

    Kolay gelsin.

  5. Arslan Topçu

    Selamlar belirtiğiniz gibi

    C:\ruby\lib\ruby\gems\1.8\gems\hpricot-0.6-mswin32\test

    içerisinde belirtilen test dosyaları mevcut ancak buradaki dosyaları nasıl çalıştıcağımı bilmiyorum

    Bu arada dosyaların orada olması hpricot u kurduğu anlamına gelmezmi belkide ruby koduna eklemesinde veya çalıştığım Netbeans platformunda hata olabilirmi başka ne önerirsiniz.

    Ben Netbeans ile bir ruby projesi oluşturduğumda ve bir ruby dosyasına aşağıdaki gibi yazıyorum
    require ‘hipricot’

    hatasını alıyorum
    :1: no such file to load — hipricot (LoadError)

    Yardımlarınız için teşekkürler….

  6. Arslan Topçu

    Ayrıca belirttiğiniz dizinde

    >ruby test_parser.rb

    yazınca aşağıdaki gibi çıktı veriyor..

    Loaded suite test_parser
    Started
    ……………………………………
    Finished in 3.328 seconds.

    42 tests, 156 assertions, 0 failures, 0 errors

  7. Arslan Topçu

    Şimdi Netbeans ın ruby ayarlarını değiştirdiğimde ve

    Ruby Interpreter
    C:\ruby\bin\ruby.exe

    ayarladığımda bu seferde

    C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require’: no such file to load — hipricot (LoadError)

    from C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require’

    from C:/Documents and Settings/hp/Belgelerim/NetBeansProjects/test/lib/main.rb:2

    gibi hata alıyorum…

  8. Tankut ŞENTÜRK

    ruby test_parser.rb

    komutu ile çalıştırdığın test_parser.rb dosyası içerisine bakacak olursak;
    require ‘hpricot’
    satırını görürüz. Bu nedenle aslında senin sisteminde bir yerlerde ruby kurulu ve o ruby düzgün çalışıyor :) Fakat biz onu bulamıyoruz.

    Son olarak, “Environment Variables” içerisindeki tüm path bilgilerini tek tek kontrol etmelisin, aralarından bir veya iki tanesi ruby farklı kurulumlarını gösteriyor.

Yaz aklındakini, çekinme :)

Lütfen: Yorumunuzun değerlendirilmesi ve yayınlanması uzun sürebilir. Yorumunuzu tekrar göndermeniz için bir neden yoktur, inanın tüm yorumları yayınlıyorum. Bazıları hariç :).