2012-02-20 139 views
-1

這是Perl代碼...將perl代碼轉換爲php? (2)

use strict; 
use warnings; 
use LWP::UserAgent; 
use HTTP::Date; 

my $taxon = $ARGV[0]; # Taxonomy identifier of organism. 

my $query = "http://www.uniprot.org/uniprot/?query=organism:$taxon&format=fasta&include=yes"; 
my $file = $taxon . '.fasta'; 

my $agent = LWP::UserAgent->new; 
my $response = $agent->mirror($query, $file); 

if ($response->is_success) { 
    my $results = $response->header('X-Total-Results'); 
    my $release = $response->header('X-UniProt-Release'); 
    my $date = sprintf("%4d-%02d-%02d", HTTP::Date::parse_date($response->header('Last-Modified'))); 
    print "Downloaded $results entries of UniProt release $release ($date) to file $file\n"; 
} 
elsif ($response->code == HTTP::Status::RC_NOT_MODIFIED) { 
    print "Data for taxon $taxon is up-to-date.\n"; 
} 
else { 
    die 'Failed, got ' . $response->status_line . 
     ' for ' . $response->request->uri . "\n"; 
} 

我曾嘗試轉換爲PHP ... 仍有都是錯誤的代碼行:在else if語句.. 如果您發現其他錯誤,請在這裏發表評論吧...

這裏是我到目前爲止已經試過

$taxon = $ARGV[0]; # Taxonomy identifier of organism. 

$query = "http://www.uniprot.org/uniprot/?query=organism:$taxon&format=fasta&include=yes"; 
$file = $taxon . '.fasta'; 

$response = $agent->mirror($query, $file); 

if ($response->is_success) { 
    $results = $response->header('X-Total-Results'); 
    $release = $response->header('X-UniProt-Release'); 
    $date = sprintf("%4d-%02d-%02d", date_parse($response->header('Last-Modified'))); 
    print "Downloaded $results entries of UniProt release $release ($date) to file $file\n"; 
} 
elsif ($response->code == HTTP::Status::RC_NOT_MODIFIED) { 
    print "Data for taxon $taxon is up-to-date.\n"; 
} 
else { 
    die ('Failed, got ' . $response->status_line . 
    ' for ' . $response->request->uri . "\n"); 
} 
+3

嗯,你需要找到可比的PHP庫來替換Perl代碼使用的庫。這行'HTTP :: Status :: RC_NOT_MODIFIED'對PHP沒有意義。 – quickshiftin 2012-02-20 17:27:35

+0

@quickshiftin這是'304未修改'。有了庫,你可以解析它。看到我的答案。 – 2012-02-20 17:47:43

+0

謝謝你..我仍然在尋找替換 – ansherina 2012-02-20 17:51:00

回答

1

使用這個WebGet類。

require("WebGet.php"); 
$taxon = $argv[0]; 
$agent = new WebGet(); 
$agent->useCache = true; 
$agent->cacheLocation = '/tmp'; 
touch('cookie.txt'); 
$agent->cookieFile = 'cookie.txt'; 


$query = "http://www.uniprot.org/uniprot/?query=organism:$taxon&format=fasta&include=yes"; 
$file = $taxon . '.fasta'; 

$agent->requestContent($query); 

if($agent->responseStatusCode==200){ 
    $results = $agent->responseHeaders[strtoupper('X-Total-Results')]; 
    $release = $agent->responseHeaders[strtoupper('X-UniProt-Release')]; 
    $date = date("Y-m-d", strtotime($agent->responseHeaders[strtoupper('Last-Modified')])); 
    print "Downloaded $results entries of UniProt release $release ($date) to file $file\n"; 
} // 304 Not Modified 
elseif($agent->responseStatusCode==304){ 
    print "Data for taxon $taxon is up-to-date.\n"; 
}else{ 
    die ('Failed, got ' . $agent->responseStatusLine . 
    " for uniprot/?query=organism:$taxon&format=fasta&include=yes\n"); 
} 
+0

哇。非常感謝你@Shiplu ...這真的有很大的幫助:) – ansherina 2012-02-20 17:57:20

+0

是的,並感謝你 – ansherina 2012-02-20 18:11:29

+0

我仍然有錯誤,你可以幫我這個 – ansherina 2012-02-20 18:51:57

3

我不相信的,你可以在PHP中使用elsif,嘗試else if inste廣告。

1

elsif失敗的原因是因爲它需要elseif。

+0

是啊對不起,我..改變了它,但它仍然有一個錯誤.. – ansherina 2012-02-20 17:33:29

+0

什麼是錯誤? – BenOfTheNorth 2012-02-20 17:34:11

+0

我覺得這行HTTP :: Status :: RC_NOT_MODIFIED有問題,或者它不是正確的方式來在PHP代碼我猜 – ansherina 2012-02-20 17:34:31

1

你在哪裏運行這個腳本? $ARGV是perl在命令行中使用的。如果您從表單獲取信息,請使用「發佈」或「獲取」方法(可通過$_POST$_GET訪問)。

elseif替換elsif

你稱之爲$agent->mirror,但這裏沒有定義它們。

正如quickshiftin指出的,你不能引用Perl庫 - 你必須找到PHP的等價物。

+0

謝謝大家 – ansherina 2012-02-20 17:46:56

+0

@ansherina不客氣!如果您找到有用的答案,請記住用支票或upvote標記答案。 – amindfv 2012-02-20 18:05:16

+0

ahwst ..很抱歉,我是新來的..哈哈。 – ansherina 2012-02-20 18:17:52