2

任意のwikiページの最初の画像/メイン画像を取得する必要があります。これを行うには、スクレイピングツールを使用できます。しかし、私はcurlを使用してページをスクラップしています。ただし、インターネット接続が遅いことが原因である可能性があります。1つのwikiページだけを廃棄するには長い時間がかかります。それとは別に、ユーザーのクエリに応じて、少なくとも7〜8個の異なるWiki画像を同時に表示する必要があります。

したがって、これにcurlを使用しても意味がありません。wikiAPIを試しました

https://en.wikipedia.org/w/api.php?action=query&titles=India&prop=images&imlimit=1

しかし、このリストをソートするために私が与えることができる他のパラメーターはありません。通常、このAPIが返す最初の画像は、ページの上部に表示されるメイン画像ではありません。画像がページのコンテキストから離れすぎている場合があります。

Wikiタイトルごとに1つの画像を表示する必要があります。前もって感謝します。

4

4 に答える 4

4

多くの場合、「メイン画像」の非常に良い推測を得るには、 MediaWiki 拡張機能「PageImagesprop=pageimagesで提供されるを使用します。

PageImages 拡張機能は、ページで使用されている画像に関する情報を収集します。

その目的は、記事に関連付けられた最も適切なサムネイルを 1 つ返すことです。たとえば、メンテナンス テンプレート、スタブ、またはフラグ アイコンからのものではなく、意味のある画像のみを返そうとします。現在、ページで使用されている最初の無意味な画像を使用しています。

(テキストはcc-by-sa 3.0です。著者のリスト)

使用法

MediaWiki API ドキュメントから引用するには:

サムネイルや画像など、ページ上の画像に関する情報を返します。
写真の存在。
パラメーター:

ピプロップ
    返す情報:

    サムネイル
        ページに関連付けられている画像の URL とサイズ (存在する場合)。
    名前
        画像のタイトル。

    値 (「|」で区切る): サムネイル、名前
    デフォルト: サムネイル|名前

くちばしサイズ
    サムネイルの最大サイズ。
    デフォルト: 50

ピリミット
    返すページ数のプロパティ。
    50 (ボットの場合は 100) を超えることはできません。
    デフォルト: 1

ピコンティニュ
    さらに結果が得られたら、これを使用して続行します。

https://en.wikipedia.org/w/api.php?action=query&titles=インド&prop=pageimages&pithumbsize=300

戻り値:

{
    "query": {
        "pages": {
            "14533": {
                "pageid": 14533,
                "ns": 0,
                "title": "India",
                "thumbnail": {
                    "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Political_map_of_India_EN.svg/256px-Political_map_of_India_EN.svg.png",
                    "width": 256,
                    "height": 300
                },
                "pageimage": "Political_map_of_India_EN.svg"
            }
        }
    }
}

その他の例:

于 2015-01-08T03:20:50.737 に答える
3
api.php?action=query&titles=India&prop=images

アルファベット順に並べ替えられたすべての画像の完全なリストが表示されます。非 api ページのドキュメント オーダーから最初の画像を取得できます。おそらく、両方を組み合わせると、最大限に活用できます。

$topic = 'India';
$url = sprintf('http://en.wikipedia.org/wiki/%s', urlencode($topic));
$options = array(
    'http' => array(
        'user_agent' => 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:50',
    )
);
$context = stream_context_create($options);
libxml_set_streams_context($context);
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
$xp = new DOMXPath($doc);
$result = $xp->query('(//img[@class = "thumbimage"])[1]');
$image = ($result && $result->length) ? $result->item(0) : NULL;
echo $doc->saveXML($image), "\n";
于 2012-04-20T15:58:16.507 に答える
2

画像がアルファベット順に返されているようです....奇妙です。

とにかく、これはうまくいくかもしれません:

https://en.wikipedia.org/w/api.php?action=parse&text={{Barack_Obama}}&prop=images

残念ながら、最初の画像しか使用できませんが、少なくとも正しい画像です。

于 2012-04-20T15:05:11.833 に答える
0
$wikipage = file_get_contents('http://en.wikipedia.org/wiki/Cats');
preg_match_all('/<img[^<]+?>/', $wikipage, $matches);

通常、メイン画像はロック後の 2 番目の一致になります (http://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Padlock-silver.svg/20px-Padlock-silver.svg.png)

于 2012-04-20T15:09:12.940 に答える