1

ユーザーが外部サイトへの多くのリンクを送信するプロジェクトがあり、これらの送信されたリンクの HTML を解析し、リンクが送信されたときに Digg や Facebook が行うのと同じ方法でページから基本情報を抽出する必要があります。

取得したい:

  1. メイン タイトルまたは見出し (タイトル、、、などにある可能性がありh1ますh2... p)
  2. イントロまたは説明テキスト ( などに含まれる可能性がありますdiv... p)
  3. メイン画像

私の主な問題は、ここで探索するにはあまりにも多くのオプションがあり、私は少し混乱して座っていることです. 私がこれまで見てきた多くのソリューションは、不適切または非常にやり過ぎのようです。

4

1 に答える 1

2

これを行うには、サーバー側の言語を選択します。

たとえば、PHPではget_meta_tags()、メタタグに使用できます...

$meta = get_meta_tags('http://google.com');

また、DOMDocumentを使用してtitle要素を取得することもできます(title要素が必要な場合は、DOMDocumentを使用してメタタグを取得することもできます)。

$dom = new DOMDocument;

$dom->loadHTML('http://google.com');

$title = $dom
           ->getElementsByTagName('head')
           ->item(0)
           ->getElementsByTagName('title')
           ->item(0)
           ->nodeValue;

メイン画像の取得に関しては、メイン画像と見なされる可能性のあるものを何らかの形で抽出する必要があります。imgすべての要素を取得して、ページ上で最大の要素を探すことができます。

$dom = new DOMDocument;

$dom->loadHTML('http://google.com');

$imgs = $dom
         ->getElementsByTagName('body')
         ->item(0)
         ->getElementsByTagName('img');

$imageSizes = array();

foreach($imgs as $img) {

  if ( ! $img->hasAttribute('src')) {
     continue;
  }

  $src = $img->getAttribute('src');

  // May need to prepend relative path
  // Assuming Apache, http and port 80

  $relativePath = rtrim($_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'], '/') . '/';

  if (substr($src, 0, strlen($relativePath) !== $relativePath) {
     $src = $relativePath . $src;
  }

  $imageInfo = getimageinfo($src);

  if ( ! $imageInfo) {
     continue;
  }    

  list($width, $height) = $imageInfo;

  $imageSizes[$width * $height] = $img;

}

$mainImage = end($imageSizes);
于 2011-04-24T05:52:53.210 に答える