私の知る限り、Facebookはmeta name="description"
リンクされたページのタグのコンテンツ属性から取得します。
<p>
利用可能なメタディスクリプションタグがない場合は、ページで見つけた最初の段落タグの先頭からプルしているようです。
画像は<img>
ページ上の利用可能なタグから取得され、投稿時にカルーセルを選択して選択できます。
最後に、リンクのサブテキストもユーザーが編集できます(ステータスの更新を開始し、リンクを含めてから、表示されるリンクのサブテキスト領域をクリックします)。
個人的には、そのようなルートを使用します。ページをcURLし、メタタグの説明を解析し、そうでない場合は、基本的なアルゴリズムまたは最初の段落タグのみを使用して可能性のあるデータを取得し、表示されたものをユーザーが編集できるようにします(より使いやすい)ユーザーに提供し、ユーザーエージェントのさまざまなリターンに関する問題も解決します)。プレビューしたいリンクにサイトがアクセスするのにどれだけ時間がかかるかという問題が発生しないように、ユーザー向けのコントロールをajaxとして実行します。
<meta>
正規表現の代わりにDOMライブラリを使用することをお勧めします(DOMDocumentに慣れていて、不正な形式の可能性のあるhtmlページを処理する方法を知っている場合は、DOMDocumentを使用することもできます<p>
)<img>
。「実際に」発生する可能性のある無数のさまざまなケースのすべてを適切に処理する正規表現を構築することと、既知の一連のサイトからの正規表現を構築することは、非常に困難になる可能性があります。通常、 QueryPathが推奨され、利用可能なオプションの多くをカバーするstackoverflowスレッドがあります。
最近のほとんどのサイト、特に大規模なサイトは、特に動的に生成されたページの場合、メタディスクリプションタグを設定するのに適しています。
タグのページをスクレイプすることもでき<img>
ますが、画像をローカルでホストする必要があります。すべての画像をホストしてから、選択した画像を除くすべてを削除するか、サムネイルをホストすることができます(画像処理ライブラリがインストールされ、オンになっています)。どちらを選択するかは、帯域幅とストレージがより重要であるか、または、、、などを実行する1回限りの処理であるかによって異なります(imagecopyresampled
手元にあるもの/お気に入りのものを選択してください)。帯域幅の観点からのページの道徳性と、特にホットリンク防止(リファラーなどの方法)を使用してサイトをリンクするときに画像が壊れてしまう可能性があるため、ページ上の画像にホットリンクすることは望ましくありません。有効期限などから 個人的にはサムネイルの保存に行くと思います。imagecopyresized
Gmagick::thumbnailimage
自分のサーバー上の画像/サムネイルファイルを最終的に削除する場合は、リンクエンティティ全体を有効期限などを処理するためのオブジェクトとしてラップできます。あなたが高レベルのアイデアを求めたので、私はあなたに特定の実装を任せます。
しかし、多くの場合、Facebookから返されたテキストはページで利用できません。
ページのメタタグを見ましたか?私はこれまでに数ページでテストしましたが、これは通常、レンダリングされたリンクページに表示されないコンテンツが由来する場所であり、Facebookのアルゴリズムの最初の選択肢のようです。