1

Facebookに既存のWebサイトへのリンクを投稿するときと同様に、機能を作成する方法を探しています。このステートメントがかなり曖昧な場合は、詳しく説明します。

リンクを貼り付けて投稿を送信すると、Facebook がリンクと一緒にページの小さなプレビューを表示し、投稿しています (テキストと小さな画像の場合があります)。

これを達成する方法は何ですか?

同様の投稿を読みましたが、画像はあまり必要なく、テキストで十分です。

PHP で作業していますが、高レベルのアイデアを探しているため、言語は重要ではありません。以前は、cURL を使用してリンクのコンテンツを解析することを考えていましたが、多くの場合、Facebook から返されたテキストがページで利用できないという問題がありました。

他の方法はありますか?

4

2 に答える 2

1

私の知る限り、Facebookはmeta name="description"リンクされたページのタグのコンテンツ属性から取得します。

<p>利用可能なメタディスクリプションタグがない場合は、ページで見つけた最初の段落タグの先頭からプルしているようです。

画像は<img>ページ上の利用可能なタグから取得され、投稿時にカルーセルを選択して選択できます。

最後に、リンクのサブテキストもユーザーが編集できます(ステータスの更新を開始し、リンクを含めてから、表示されるリンクのサブテキスト領域をクリックします)。

個人的には、そのようなルートを使用します。ページをcURLし、メタタグの説明を解析し、そうでない場合は、基本的なアルゴリズムまたは最初の段落タグのみを使用して可能性のあるデータを取得し、表示されたものをユーザーが編集できるようにします(より使いやすい)ユーザーに提供し、ユーザーエージェントのさまざまなリターンに関する問題も解決します)。プレビューしたいリンクにサイトがアクセスするのにどれだけ時間がかかるかという問題が発生しないように、ユーザー向けのコントロールをajaxとして実行します。

<meta>正規表現の代わりにDOMライブラリを使用することをお勧めします(DOMDocumentに慣れていて、不正な形式の可能性のあるhtmlページを処理する方法を知っている場合は、DOMDocumentを使用することもできます<p><img>。「実際に」発生する可能性のある無数のさまざまなケースのすべてを適切に処理する正規表現を構築することと、既知の一連のサイトからの正規表現を構築することは、非常に困難になる可能性があります。通常、 QueryPathが推奨され、利用可能なオプションの多くをカバーするstackoverflowスレッドがあります。

最近のほとんどのサイト、特に大規模なサイトは、特に動的に生成されたページの場合、メタディスクリプションタグを設定するのに適しています。

タグのページをスクレイプすることもでき<img>ますが、画像をローカルでホストする必要があります。すべての画像をホストしてから、選択した画像を除くすべてを削除するか、サムネイルをホストすることができます(画像処理ライブラリがインストールされ、オンになっています)。どちらを選択するかは、帯域幅とストレージがより重要であるか、または、、、などを実行する1回限りの処理であるかによって異なります(imagecopyresampled手元にあるもの/お気に入りのものを選択してください)。帯域幅の観点からのページの道徳性と、特にホットリンク防止(リファラーなどの方法)を使用してサイトをリンクするときに画像が壊れてしまう可能性があるため、ページ上の画像にホットリンクすることは望ましくありません。有効期限などから 個人的にはサムネイルの保存に行くと思います。imagecopyresizedGmagick::thumbnailimage

自分のサーバー上の画像/サムネイルファイルを最終的に削除する場合は、リンクエンティティ全体を有効期限などを処理するためのオブジェクトとしてラップできます。あなたが高レベルのアイデアを求めたので、私はあなたに特定の実装を任せます。

しかし、多くの場合、Facebookから返されたテキストはページで利用できません。

ページのメタタグを見ましたか?私はこれまでに数ページでテストしましたが、これは通常、レンダリングされたリンクページに表示されないコンテンツが由来する場所であり、Facebookのアルゴリズムの最初の選択肢のようです。

于 2012-12-17T23:27:04.310 に答える
0

私はThumbnailApp.comの開発者です。

これは、オプションの Javascript SDK を備えた JSON API サービスであり、まさにあなたが望んでいることを実行すると思います。文字列を解析して URL を検出し、アセットのタイトル、説明、およびサムネイルを返します。ページに OpenGraph タグがある場合、画像のサムネイルにそれらが使用されます。現在はプライベート ベータ版ですが、毎週アカウントを追加しています。

自分でできる解決策が本当に必要だと感じた場合:

Python ベースのWebkit2Pngとヘッドレス ブラウザーPhantomJsをチェックしてください。それらは Web ページを画像 (デフォルトのサイズは 800x600) にレンダリングできます。次に、taswyn が言及したように、画像のサイズを変更してトリミングするコードを記述する必要があります。サイズ変更した画像を A​​mazon S3 にアップロードし、CloudFront などの CDN でホストするのが理想的です。

タイトルと説明を取得するには、まず URL コンテンツ (cURL など) を取得しますcontent-type。ヘッダーをチェックして、それが Web ページであることを確認する必要があります。そうである場合は、 SimpleHTMLDOM PHP ライブラリなどの HTML パーサーを使用して、タイトルと説明のメタデータを取得できます。Facebook とまったく同じようにしたい場合は、OpenGraph タグ、特にタグも確認する必要がありますog:image

キャッシングもお忘れなく。最初のレンダリングと説明の解析には時間がかかる場合があります。サイトが高速であっても、レンダリングする Web ページが遅くなる可能性があります。最適な方法は、一度レンダリング/解析してから、サイズ変更された画像とメタデータを保存して、後続のリクエストのために返すことです。要件によっては、キャッシュされたデータを 1 時間ごとに更新する必要がある場合もあれば、1 日に 1 回更新するだけで済む場合もあります。

自分で行うには、かなりの作業と多くのサーバー構成が必要です。サードパーティのサービスを使用する方が良い方法だと思いますが、明らかに偏った意見があります:)

于 2013-08-28T03:25:51.733 に答える