Hpricot Örneği

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..

** Düzeltme kodlar muhtemelen artık çalışmıyordur. Sadece örnek olması açısından değerlendirin lütfen.

Hpricot ÖrneÄŸi” üzerine 8 yorum

  1. 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. 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. 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. 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. 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. 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. Ş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. 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.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir