3

このコードを使用してウィキペディアAPIを介して記事を取得しようとしています

$url = 'http://en.wikipedia.org/w/api.php?action=parse&page=example&format=json&prop=text';
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$c = curl_exec($ch);
$json = json_decode($c);
$content = $json->{'parse'}->{'text'}->{'*'};

ウェブサイトのコンテンツを表示でき、すべて問題ありませんが、取得した記事内のリンクに問題があります。URLを開くと、すべてのリンクがhref = \ "/で始まることがわかります。つまり、誰かが記事内の関連リンクをクリックすると、代わりにwww.mysite.com / wiki / ..(エラー404)にリダイレクトされます。 of en.wikipedia.com / wiki / ..この問題を修正するために既存のコードに追加できるコードはありますか?

4

3 に答える 3

4

次のようなリンクを修正できるはずです。

$content = str_replace('<a href="/w', '<a href="//en.wikipedia.org/w', $content);
于 2012-09-10T07:35:31.683 に答える
4

これはMediaWikiAPIの欠点のようaction=parseです。実際、誰かがすでに完全なURLを返すオプションを要求する機能リクエストをaction=parse提出しました。

回避策として、リンクを自分でマングルするか(adilが提案するように)、次のindex.php?action=renderように使用することができます。

これにより、APIラッパーのないページHTMLのみが提供されますが、それでも必要な場合は問題ありません。(たとえば、これは、リモートファイルの説明ページを表示するためにInstantCommonsによって内部的に使用されるメソッドです。)

于 2012-09-10T12:25:53.707 に答える
0

他の誰かがURLのすべてのインスタンスを置き換える必要がある場合に備えて。

g正規表現とフラグを使用する必要があります

/<a href="\/w/g

于 2020-01-12T11:06:17.777 に答える