今日は、この画像を取得する方法の1つを紹介します。
少し前に、私は自分自身のために1つのことを書きました(まもなくそれをあなたと共有します)。
いくつかのオプションがありました。
-独自のサムネイルジェネレータを作成します。自分でこれを理解します-スクリプトはページを開いて写真を撮り、画像を保存する必要がありますが、JavaScriptを使用してページ全体を必要とします。理解できるように、追加のモジュールなどでサーバーを十分に拡張する必要があります。 。
-さらに、既製のソリューション、サイトのプレビューを受信するためのapiを提供するさまざまなリソースに目が行きましたが、未知のリソースに降伏するため、どこでも自由を得られず、延期することが決定され、将来、このアプローチを放棄しました
-その後、ワードプレスは、より正確にはmShotsサービス(例えば、 ここで読むことができます )に救助に来ましたが、サービスはいずれにしても画像を返しますが、その不在を確認することはできません(私は誰にも画像の不在を確認する決定を共有できます)プレビューを作成する時間であり、サービスはこれについて通知しません。ただし、いずれの場合もgifプリローダーを返します。
最後の方法では、停止し、より安定した方法の検索を続行することが決定されました。 検索はGoogle Seachで行われ、彼がサイトのスクリーンショットを提供したという事実に注意を払うことは困難でした(判明したように、彼はキャッシュからそれらを取得します)。
そこで、Googleから画像を取得する方法の検索を開始しました。
最初のケースはクエリに見えました:
ご覧のとおり、楽しいものは何もなく、多くの奇妙なパラメーターがあります。
各パラメーターについては説明しませんが、すべてはわかりませんが、「j」と「b」は安全に削除でき、「a」は独自の3桁のハッシュであり、最終的にはhtmlページレイアウトに埋め込まれます。解析することで取得できます。
このアプローチを試してみることにしました。ロジックは次のとおりです。
-検索を実行します。タスクではサイトを見つける必要があるため、サイトを探しています:http://domain.zone
-parsimが受信し、ハッシュとURLを見つけます
-希望するリクエストを作成し、希望するリクエストを取得します
すべてが論理的であるように思えるので、私は働くようになりました。
運命の意思と時間の不足により、私はこの仕事を延期し、今夜までそれを忘れていました、
しかし、 goo.glリソースは、 それを思い出させてくれました。むしろ、新しいURLを取得したいページのプレビューなど、新しいデザインと新しい機能を思い出させてくれました。 はい、goo.glを知らない人は短いURLを取得する機会を提供します。
「clients1.google.com/webpagethumbnail」というリクエストに関する情報を検索することにしました。googleseachはサイトのスクリーンショットのためにこのアドレスを参照します。ここでこの記事につまずきました。
少し動揺し、同時に私のパンの準備ができていることをうれしく思うと同時に、goo.glに興味を持って戻ってきました。
怖いパラメーターは既にありません。ショートカットのURL APIがあり、2つのパラメーターがあります。
-security_token-私が理解しているように、オプションのパラメーター(間違っている場合は修正してください)
-url-および情報を受信するアドレス
すべてが非常に明確で理解しやすいものであり、制限に気付かれることはありません。 私が実験した小さなテストスクリプトを作成しました。
header('Content-Type: text/html; charset=utf-8');// define('URL_API', 'http://goo.gl/api/shorten');// /* * * * @param string $wab_page * url , * @param string $url * url * @param boolean $header * * * @return boolean or decode json * true, $header=TRUE , * decode json */ function http_request($wab_page, $url=URL_API, $header=FALSE) { $ch = curl_init();// curl_setopt($ch, CURLOPT_HEADER, $header);/// curl_setopt($ch, CURLOPT_NOBODY, $header);/// curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);// "Location: " curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);// curl , if(!$header){// , curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7');// curl_setopt($ch, CURLOPT_POST, TRUE);// POST curl_setopt($ch, CURLOPT_POSTFIELDS, 'url='.urlencode($wab_page).'&security_token=');// , post }else{// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// curl } curl_setopt($ch, CURLOPT_URL, $url);//c , $response = curl_exec($ch);// curl curl_close($ch);// curl if($header){// , if(strpos($response, "200 OK")!==false)// , 200 return true;// }else// , return json_decode($response);// decode json } $wab_page='http://bd.com.ua/';// $request=http_request($wab_page);// if($request){// , $img=$request->preview_url;// url $short_url=$request->short_url;// if(http_request(null,$img,true)){// , echo $wab_page.' - <a href="'.$short_url.'">'.$short_url.'</a><br/><img src="'.$img.'">';// }else{// echo $wab_page.' - <a href="'.$short_url.'">'.$short_url.'</a><br/> ';// } }else{ echo ' =('; }
ここで作成しているものが明確になるように、すべてのコードをコメント化しました。 ここからファイルをダウンロードできます。
私は簡単に説明します:
-まず、apiアドレス「 goo.gl/api/shorten 」でリクエストを行い、それに応じて「short_url」、「long_url」、「creation_time」、「preview_url」の情報を含むjson行を取得します
-その後、画像の存在を確認します(私が理解している限り、画像へのパスは常に返されるため)、ステータス200のヘッダーを確認します
-すべてがうまくいけば、すべてがうまく報告されているわけではなく、写真を提供します
他の誰よりも私がこのアプローチについて好きなこと:
-私はGoogleのみに依存しています。サードパーティのリソースとして閉じたり、動作を停止したりすることはほとんどありません。一方で、プレビューを受信する可能性を隠してしまう可能性があります(ただし、この場合はmShotsがあります)
-このアプローチは、検索エンジンにクエリを実行してページを解析するよりもコードが高速で短い
-そして、ここで私はまだ短いアドレスを得ることができます。
残念ながら、私はテストページを実行しませんでした。ホスティングが立ち上がらないのではないかと考えています。誰かがページを配置できる場所を提案できる場合は、喜んでアドバイスに従います。
それだけです。多くの人がこの情報が役立つことを願っています。多くのアプリケーションがすぐに見つかる場所を推測します。
PS修正や追加を楽しみにしています。特に、既存のコードを改善する方法に興味があります。不正確な可能性、特に綴り、時刻の影響について事前に謝罪します。