3

c#: link textのみで、私のものと似たような質問があることに気付きました。説明させてください: 私は Web サービスの実装全体に非常に慣れていないため、理解に苦労しています (特にあいまいな MediaWiki API マニュアルが原因で)。

ページ全体を PHP (XML ファイル) の文字列として取得し、それを PHP で処理したい (XML ファイルを解析するためのより洗練された方法が他にもあると確信しています): Main Page wikipedia .

やってみ$fp = fopen($url,'r');ました。出力: HTTP request failed! HTTP/1.0 400 Bad Request. API に接続するためのキーは必要ありません。

API に接続してページを文字列として取得する方法を詳しく説明できますか?

編集: URL は$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main Page';. ファイルの内容全体を文字列に読み込んで使用したいだけです。

4

3 に答える 3

8

その API への接続は、ファイルを取得するのと同じくらい簡単です。

開く

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$fp = fopen($url, 'r');
while (!feof($fp)) {
    $c .= fread($fp, 8192);
}
echo $c;

file_get_contents

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$c = file_get_contents($url);
echo $c;

上記の 2 つは、サーバーでfopenラッパーが有効になっている場合にのみ使用できます。

それ以外の場合は、サーバーにcURLがインストールされている場合は、それを使用できます。

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$c = curl_exec($ch);
echo $c;
于 2009-12-13T20:18:53.567 に答える
2

おそらく、クエリ文字列で渡すパラメーターを urlencode する必要があります。ここで、少なくとも " Main Page" にはエンコードが必要です。このエンコードがないと、400 エラーも発生します

これを試すと、よりうまく機能するはずです(スペースが に置き換えられていることに注意してください%20) :

$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$str = file_get_contents($url);
var_dump($str);

これで、ページのコンテンツを取得しています。


解決策は を使用するurlencodeことです。そのため、自分自身をエンコードする必要はありません:

$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=' . urlencode('Main Page');
$str = file_get_contents($url);
var_dump($str);
于 2009-12-13T20:23:38.787 に答える
1

MediaWiki API ドキュメントによると、PHP リクエストで User-Agent を指定しない場合、WikiMedia は 4xx HTTP レスポンス コードで接続を拒否します。

https://www.mediawiki.org/wiki/API:Main_page#Identifying_your_client

コードを更新してそのリクエスト ヘッダーを追加するか、編集アクセス権がある場合は php.ini のデフォルト設定を変更してみてください。

于 2012-10-08T14:57:21.890 に答える