PHP MediaWiki API bağlanma ve veri almak

3 Cevap php

I noticed there was a question somewhat similar to mine, only with c#:link text. Let me explain: I'm very new to the whole web-services implementation and so I'm experiencing some difficulty understanding (especially due to the vague MediaWiki API manual).

I want to retrieve the entire page as a string in PHP (XML file) and then process it in PHP (I'm pretty sure there are other more sophisticated ways to parse XML files but whatever): Main Page wikipedia.

Ben yapıyorum denedim $fp = fopen($url,'r');. Bu çıkışlar: HTTP request failed! HTTP/1.0 400 Bad Request. API kendisine bağlamak için bir anahtar gerektirmez.

Eğer API bağlanmak ve bir dize olarak sayfayı nasıl ayrıntılı olarak anlatabilir misiniz?

EDIT: The URL is $url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main Page';. I simply want to read the entire content of the file into a string to use it.

3 Cevap

Bu API bağlanırken, dosya alma gibi basit

fopen

$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;

Sunucu etkin fopen sarma varsa Yukarıdaki iki yalnızca kullanılabilir.

Sunucu cURL yüklü, aksi takdirde bu kullanabilirsiniz,

$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;

Muhtemelen sorgu dizesinde geçiyor parametreleri UrlEncode gerekir; burada, en azından "Main Page" kodlama gerektirir -- without this encoding, I get a 400 error too.

Bunu denerseniz, bu çalışması gerektiğini daha iyi (note the space is replaced by %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);

Bu ile, sayfanın içeriğini alıyorum.


A solution is to use urlencode, so you don't have to encode yourself :

$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);

Eğer PHP isteği bir User-Agent belirlemek yoksa MediaWiki API docs göre, WikiMedia 4xx HTTP yanıt kodu ile bağlantıyı reddeder:

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

O istek başlığı eklemek için kodu güncelleyerek deneyin, ya da bu düzenleme erişiminiz varsa php.ini içindeki varsayılan ayarı değiştirmeniz gerekebilir.