Googleは最近、リンクを短縮するサービス-G.COを開始しました。 このサービスは、現在Googleマップでのみサポートされている内部Googleサービスを対象としています。 そこで、カードの長いアドレスを短くすることができます。 私はすぐにこのことをいじりたい、または外部URLを短くしたいと思いました。 この記事で私がどのように成功したかについて読むことができます。
リクエストをキャッチします
私が最初に思いついたのは、サーバーへのHTTPリクエストをキャッチし、長いアドレスの値を置き換えることでした。 このために、HTTPスニファーを使用しました。 Googleは、リンクを短縮するために、このようなPOSTリクエストをここに送信します。
http://maps.google.ru/maps/urlshortener?q=http:%2F%2Fmaps.google.ru%2F%3Fll%3D55.354135,40.297852%26spn%3D28.518959,86.572266%26z%3D4%26vpsrc%3D0&abauth={ }&authuser=0
そして、同様の応答がサーバーから送信されます。
{short_url:"http://g.co/maps/a9qd", status_code:0}
残念ながら、qの値を任意の値に置き換えた場合、Googleはリンクを短縮しませんが、送信したリンクを返します。たとえば:
{short_url:"http://habr.ru/", status_code:0}
それはしません。 さらに考えてみましょう...
リダイレクトを探しています
2番目のアイデアは、maps.google.comから外部サイトへのリダイレクトを見つけて、そのようなリンクを短くすることです。 残念ながら、私が見つけた唯一のリダイレクトは
maps.google.ru/url?q=http://yandex.ru
maps.google.ru/url?q=http://yandex.ru
、明らかに、警告を伴うリダイレクトは私たちに合わないので、別の解決策を探します。 ところで、リダイレクトアドレスが* .google.com / *の場合、リダイレクトは警告なしで機能します。 さて、このメモを取ります;)
Googleサイト
別の考えは、 このサービスを通じて作成されたサイトにリダイレクトコードをプッシュしようとすることです。 したがって、Googleの任意のjavascriptで挿入できないことは明らかです。そのため、ページ編集パネルで[ガジェットを追加]を選択し、ガジェット選択ウィンドウで[ リダイレクトを検索]を選択する必要があります。
ガジェットはiframe内にあるため、次のように機能することを意味します。
top.location.href = "http://someurl.com/";
はい、それは彼が親ウィンドウをリダイレクトすることを意味します!
Googleマップサービスで動的URLを持つiframeを見つける必要があります。
Googleマップでiframeを探しています
予想どおり、長い間検索する必要はありませんでした。 ここにあるiframe:
こちらが彼の住所です。
明らかに、ここではurlパラメーターを置き換えるだけですが、ここでも問題はiframe内で開くURLがmaps.google.comドメインにしか存在できないことです。 そして、ここではリダイレクトを使用します! このアドレスを取得します。
http://maps.google.ru/maps/empw?url=http://maps.google.com/url?q=https://sites.google.com/site/{yoursite}
一言で言えば、ここで何が起こるか:
maps.google.com/maps/empwで srcがフィルターされたimapが開かれた場合(maps.google.comドメインでのみ許可)、リダイレクトmaps.google.com/urlを介してこのフィルターをバイパスします。 また、maps.google.com / urlはメールアドレスをGoogleウェブサイトにリダイレクトします。 次に、Googleサイトには、親ブラウザウィンドウのリダイレクトガジェットが格納されます。
この住所を短くしてみてください、ヘルメットのリクエスト
http://maps.google.ru/maps/urlshortener?q=http://maps.google.ru/maps/empw?url=http://maps.google.com/url?q=https://sites.google.com/site/{yoursite}&abauth={ }&authuser=0
すべてが機能します! 素晴らしい。
生きている例。