3

Google のカスタム検索 API を使用して、Web 検索結果を動的に提供しています。API のドキュメントを徹底的に検索しましたが、たまたま base64 エンコードとして保存されている Google のサイト イメージ プレビューへのアクセスを許可するという記述は見つかりませんでした。

Google Web 検索 API が返す URL ごとに、サイトの画像プレビューを提供できるようにしたいと考えています。これらの画像をサムネイルにするのではなく、大きな画像にしたいことに注意してください。私の質問は、短期的にも長期的にも、効率とコストの両方の観点から、これを行うための最良の方法は何かということです.

1 つのオプションは、Web をクロールして、自分で画像を生成して保存することです。しかし、これは私の技術的能力をはるかに超えており、さらにこれらの画像をすべて保存するにはコストがかかりすぎます。

もう 1 つのオプションは、Google の API が検索結果を返した直後に画像を動的に取得することです。ただし、どこで/どのように画像を取得するかは別の問題です。

自分で画像を生成する低コストの方法はありますか? それとも、私のためにこれを行う何らかのサイトサムネイルサービスを使用するのが最善の解決策でしょうか? これは十分に速いでしょうか?それは高すぎるでしょうか?このサービスは、適切なサイズの画像を提供してくれますか? そうでない場合、どうすれば画像のサイズを変更できますか?

包括的な回答と、コード例がレールを使用したルビーであることを本当に感謝しています。

4

2 に答える 2

2

あなたがあなたの質問で指摘したように、私があなたの問題に見ることができる2つのアプローチがあります:

  1. 外部サービスを使用して、画像をレンダリングおよびホストします。
  2. 画像を自分でレンダリングしてホストします。

私はこの分野の専門家ではありませんが、これまでのところ、私のグーグルはサムネイルを生成できるサービスのみを返し、フルサイズのスクリーンショットは返していません(ここで説明したいくつかのように)。あなたのためにこれを行うホストされたサービスがそこにある場合、私はそれらを簡単に見つけることができませんでした。

だから、それは#2を残します。このため、私の最初の本能は、Webページから画像を生成できるルビーライブラリを探すことでした。それにより、すぐにIMGKitにたどり着きました(他にもあるかもしれませんが、これはクリーンでシンプルに見えました)。このライブラリを使用すると、URLを簡単に渡すことができ、Webkitエンジンを使用してページのスクリーンショットを生成します。そこから、 PaperclipCarrierWaverailscast)などのファイル添付ファイルを使用して、アセットが保存されている場所(Amazon S3など)に保存します。)。WSAPI(Web Search API)からIMGKitに渡した元のURLを記録するフィールドに添付ファイルを保存して、後続の検索でそれと比較し、プレビューを再レンダリングする代わりにキャッシュされたバージョンを使用できるようにします。添付ファイルモデルのフィールドを使用して、created_at「x日より古い場合は、画像を更新する」タイプのロジックをスローすることもできます。最後に、resquerailscast )のようなものを使用して、これをすべてバックグラウンドジョブに入れます)スクリーンショットがレンダリングされるのを待っているときにユーザーがブロックされないようにします。WSAPIから返されたURLの配列をresqueのバックグラウンドワーカーに渡し、IMGKitを介して画像を生成します。基本的にはペーパークリップ/キャリアウェーブを介してS3に保存します。これらのプロジェクトはすべて十分に文書化されており、Railscastsはresqueとcarrierwaveの宝石の基本を説明します。

私は数字を計算していませんが、S3で画像を自分でホストすることと、Webサムネイル生成の他の外部プロバイダーとを比較することはできます。もちろん、自分でそれを行うと、画像の外観(品質、フォーマットなど)を完全に制御できますが、私が遭遇したほとんどのサービスは小さなサムネイルしか提供しないので、それについては何か言いたいことがあります。以前の検索からの画像をキャッシュしない場合は、常にその場で画像をレンダリングするため、コストがさらに削減されます。ただし、サーバーの電力(IMGKitと画像処理の場合)と帯域幅(IMGKitのソースHTMLをフェッチする外部要求の場合)に多くの費用がかかる可能性があるため、これはあまり拡張できないと思います。必ずいくつかの指標を含めますプロジェクトで、処理しているリクエストの種類に正確な数値を付けて、その後のコストを決定するのに役立てます。

とにかく、それは私のハイレベルなアプローチです。私はそれがいくつかの助けになることを願っています。

于 2011-06-28T19:47:27.307 に答える
1

Web ページのスクリーン ショットを確実に実行するのは非常に困難です。主な問題は、現在のすべてのソリューション (khtml2png、CutyCapt、Phantom.js など) がすべて、組み込みの Webkit ライブラリへのアクセスを提供する QT に基づいていることです。ただし、その Webkit ビルドはかなり古く、HTML5 と CSS3 では、ほとんどの効果が表示されないか、正しくレンダリングされません。

私の同僚の 1 人は、個人的なプロジェクトの 1 つで Web ページのスクリーンショットを生成するために、現在のテクノロジのすべてではないにしてもほとんどを使用しました。彼は、ソリューションを自分で維持しようとする代わりに、SaaS ソリューションをどのように使用しているかについて、有益な投稿をここに書いています。

TLDR バージョン。彼は現在、URL2PNGを使用して、すべてのサムネイルとフルサイズのスクリーンショットを作成しています。それは無料ではありませんが、彼はそれが彼のために仕事をすると言います. それらを使用したくない場合は、ここに競合他社のリストがあります。

于 2011-06-29T15:22:42.727 に答える