2012-02-08 51 views
0

有沒有人在http://oreilly.com/pub/h/974#code上運行perl腳本?從「Yahoo! Directory Mindshare in Google」運行perl hack

這是一個着名的,用於從Yahoo!獲取URL。目錄和許多人已經成功地使用它。

我試圖獲取網址。我創建了自己的Google API密鑰,並將其替換爲代碼。 除此之外,我沒有做任何改變。

腳本既不會產生任何錯誤,也不會產生任何URL。

#!/usr/bin/perl -w 

use strict; 
use LWP::Simple; 
use HTML::LinkExtor; 
use SOAP::Lite; 

my $google_key = "your API key goes here"; 
my $google_wdsl = "GoogleSearch.wsdl"; 
my $yahoo_dir = shift || "/Computers_and_Internet/Data_Formats/XML_ _". 
       "eXtensible_Markup_Language_/RSS/News_Aggregators/"; 

# download the Yahoo! directory. 
my $data = get("http://dir.yahoo.com" . $yahoo_dir) or die $!; 

# create our Google object. 
my $google_search = SOAP::Lite->service("file:$google_wdsl"); 
my %urls; # where we keep our counts and titles. 

# extract all the links and parse 'em. 
HTML::LinkExtor->new(\&mindshare)->parse($data); 

sub mindshare { # for each link we find... 

    my ($tag, %attr) = @_; 

    print "$tag\n"; 

    # continue on only if the tag was a link, 

    # and the URL matches Yahoo!'s redirectory. 

    return if $tag ne 'a'; 

    return unless $attr{href} =~ /srd.yahoo/; 

    return unless $attr{href} =~ /\*http/; 



    # now get our real URL. 

    $attr{href} =~ /\*(http.*)/; my $url = $1; 

    print "hi"; 

    # and process each URL through Google. 

    my $results = $google_search->doGoogleSearch(

         $google_key,"link:$url", 0, 1, 

         "true", "", "false", "", "", "" 

       ); # wheee, that was easy, guvner. 

    $urls{$url} = $results->{estimatedTotalResultsCount}; 

    print "1\n"; 

} 

# now sort and display. 

my @sorted_urls = sort { $urls{$b} <=> $urls{$a} } keys %urls; 

foreach my $url (@sorted_urls) { print "$urls{$url}: $url\n"; } 

程序進入循環,在第一次迭代出來,以 「我的@sorted_urls =排序{$網址{$ B} < => $網址{$ A}}鍵%的網址,」。

我對perl沒有任何理解,但這個任務應該是微不足道的。

當然,我錯過了一些非常明顯的東西,因爲這個腳本已經被很多人成功地使用了。

在此先感謝。

回答

1

您是否向腳本提供目錄?因爲如果你不和這條線在腳本

"/Computers_and_Internet/Data_Formats/XML_ _". 
       "eXtensible_Markup_Language_/RSS/News_Aggregators/" 

不是格式化假象,然後你想刮一個不存在的頁面。

+0

嘿,即使運行它作爲 「perl mindshare.pl」/娛樂/幽默/拖延/「」沒有幫助。 「GoogleSearch.wsdl」存在於同一目錄中。還有什麼我需要做的? – instanceOfObject 2012-02-08 12:34:35

+0

我甚至嘗試過不使用「GoogleAPIKey」並修改函數定義來收回較少的參數。 – instanceOfObject 2012-02-08 12:43:14

+0

我沒有Googleapi密鑰或時間測試腳本,但是:以perl -d mindshare.pl運行腳本,它會將您放入perl調試器中。單步執行程序'p'和'x'將幫助您查看變量中的內容('l'將列出您的位置)。從你說的話來看,關聯數組%URL沒有被填充。 – 2012-02-08 14:16:53