5

こんにちは、私はウィキペディアから情報を取得するために Curl を使用しています。主要な画像に関する情報のみを受け取りたいです。記事のすべての画像を受け取りたくはありません。たとえば、すべての情報を取得したい場合英語の画像 ( http://en.wikipedia.org/wiki/English_language ) 次の URL にアクセスしてください: http://en.wikipedia.org/w/api.php?action=query&titles=English_Language&prop=images XML で英語を話す国の国旗を受け取ります。

<?xml version="1.0"?> <api>   <query>
    <normalized>
      <n from="English_language" to="English language" />
    </normalized>
    <pages>
      <page pageid="8569916" ns="0" title="English language">
        <images>
          <im ns="6" title="File:Anglospeak(800px)Countries.png" />
          <im ns="6" title="File:Anglospeak.svg" />
          <im ns="6" title="File:Circle frame.svg" />
          <im ns="6" title="File:Commons-logo.svg" />
          <im ns="6" title="File:Flag of Argentina.svg" />
          <im ns="6" title="File:Flag of Aruba.svg" />
          <im ns="6" title="File:Flag of Australia.svg" />
          <im ns="6" title="File:Flag of Bolivia.svg" />
          <im ns="6" title="File:Flag of Brazil.svg" />
          <im ns="6" title="File:Flag of Canada.svg" />

ご本尊の情報だけ知りたいです。

4

5 に答える 5

7

ニュースがあります!(2014 年から)
新しい拡張機能PageImagesが利用可能になり、ウィキメディア ウィキに既にインストールされています。

の代わりにprop=imagesを使用すると、各要素の属性と子ノードprop=pageimagesが取得されます。pageimage<thumbnail><page>

確かに、最良の結果が得られるとは限りませんが、あなたの例 ( English Language ) ではうまく機能し、すべてのフラグではなく、地理的分布のマップのみが生成されます。


また、OpenSearch APIは xml 表現で を返します<image>が、この API はリストでは使用できず、クエリ API と組み合わせることもできません。

于 2014-07-16T07:32:05.190 に答える
1

他の人が指摘しているように、ウィキペディアの記事には「主要な画像」のようなものは実際にはありません。そのため、最初の問題は、特定のページで使用されるさまざまな画像から選択する方法を決定することです。考えられる選択基準は次のとおりです。

  • 記事中の最大画像。
  • 60 × 60 ピクセルなど、特定の最小サイズを超える最初の画像。
  • テンプレートではなく、記事のソース テキストで直接参照される最初の画像。

最初の 2 つのオプションでは、次のように、レンダリングされたページの HTML コードを取得しaction=parse、HTML パーサーを使用imgしてコード内のタグを見つけます。

http://en.wikipedia.org/w/api.php?action=parse&page=English_language&prop=text|画像

(ページで使用されている画像のサイズを API から直接取得できない理由は、その情報が実際には MediaWiki データベースのどこにも保存されていないためです。)


最後のオプションでは、記事のソース ウィキテキストが必要prop=revisionsですrvprop=content

http://en.wikipedia.org/w/api.php?action=query&titles=English_language&prop=revisions|images&rvprop=content

インフォボックスなどの多くの画像はテンプレートへのパラメーターとして指定されるため、[[Image:...]]構文を解析するだけでは一部が失われることに注意してください。より良い解決策はおそらく、ページで使用されているすべての画像のリストを取得しprop=images(上記で示したように、同じクエリで実行できます)、ウィキテキストでそれらの名前 ( Image:/File:プレフィックスの有無にかかわらず) を探すことです。

MediaWiki がページ (および画像) 名を自動的に正規化するさまざまな方法に注意してください。最も注目すべきは、アンダースコアがスペースにマップされ、連続する空白が 1 つのスペースに折りたたまれ、名前の最初の文字が大文字になります。この方法を選択する場合、ファイル名のリストを正規表現に変換する PHP コードのサンプルを以下に示します。

foreach ($names as &$name) {
    $name = trim( preg_replace( '/[_\s]+/u', ' ', $name ) );
    $name = preg_quote( $name, '/' );
    $name = preg_replace( '/^(\\\\?.)/us', '(?i:$1)', $name );
    $name = preg_replace( '/\\\\? /u', '[_\s]+', $name );
}
$regexp = '/' . implode( '|', $names ) . '/u';

たとえば、リストが与えられた場合:

Anglospeak(800px)Countries.png
Anglospeak.svg
Circle frame.svg
Commons-logo.svg
Flag of Argentina.svg
Flag of Aruba.svg

生成される正規表現は次のようになります。

/(?i:A)nglospeak\(800px\)Countries\.png|(?i:A)nglospeak\.svg|(?i:C)ircle[_\s]+frame\.svg|(?i:C)ommons\-logo\.svg|(?i:F)lag[_\s]+of[_\s]+Argentina\.svg|(?i:F)lag[_\s]+of[_\s]+Aruba\.svg/u
于 2012-08-28T22:26:48.077 に答える
0

imlimitパラメータを使用して、記事の最初の画像にクエリを制限できます。

http://en.wikipedia.org/w/api.php?action=query&titles=English_Language&redirects&prop=images&imlimit=1

于 2012-08-27T19:05:25.367 に答える