keyさえ取得すれば短縮化は簡単。

let surl=async function(longUrl){
 //https://developers.google.com/url-shortener/v1/getting_started => GET A KEY
 let key='AIzaSyBDlJ8GkS0EFoQeOt7lGheXXXXXXXXXXX'
 ,url=`https://www.googleapis.com/urlshortener/v1/url?key=${key}`
 ,opt={method:'post',headers:{'Content-Type':'application/json'},body:JSON.stringify({"longUrl":longUrl})}
 ,ret =await fetch(url,opt).then(d=>d.json())
 ;
 document.querySelector('pre').innerHTML=JSON.stringify(ret,null,2);
 //{"kind": "urlshortener#url", "id": "https://goo.gl/rS325r", "longUrl":...}
}
function a(){ surl(document.querySelector('input').value) }
<input style="width:50vw"></input><button onclick="a()">go</button><pre></pre>

履歴やアクセス数を取得するためにはoauthが必要。oauth.io経由が楽。

追記 復元はkeyでよい。

let unsurl=async function(shortUrl){
 let key=localStorage.getItem('shortenerKey')
 ,url=`https://www.googleapis.com/urlshortener/v1/url?key=${key}&shortUrl=${shortUrl}&projection=full`
 ,opt={method:'get',headers:{'Content-Type':'application/json'}} ////method the get
 ,ret =await fetch(url,opt).then(d=>d.json())
 ;
 document.querySelector('pre').innerHTML=JSON.stringify(ret,null,2);
}
//
function b(){ unsurl(document.querySelector('input').value) }
<input style="width:50vw"></input><button onclick="a()">s</button><button onclick="b()">l</button><pre></pre>

追加 検証分

  • redirect先が画像であれば<img src="https://goo.gl/D56q5x"></img>が通用する。
  • url('....')というURLは、invalid value
  • data:image/png;base64というURLも、invalid value
  • 上手く偽装し、https://data/image/png/base64/....に変えると通る。 但し <img src="https://data/image/png/base64/..."></img>は画像として認識しない。当然だがbase64imageへ多少の変換が必要。偽装した分戻す処理を加えることが出来ればストレージ化出来る。
  • https://localhost:8080 ok
  • urlのサイズ制御がかかっている。640kbの画像データは偽装しても短縮化出来ない。30*30pixelのアイコン程度なら偽装すれば可能。
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.