Delphiでgoo.gl(Googleの短縮 URL サービス)のAPIを使って短縮URLを取得する方法を紹介します。
APIにデータを送信する方法がわかりにくかったのでまとめてみました。
JSONデータを解析する方法も参考になると思います。
事前準備
Google APIsのページでURL Shortener APIを有効にする
Google APIs Consoleにログインして、「Services」メニューを選択し、「URL Shortener API」を「Active」に変更します。
API Keyを取得する
Google APIs Consoleで「API Access」メニューを選択し、「Create new Browser key」ボタンを押してAPI keyを作成する。(Referers欄は空欄のまま)
SSLに必要なDLL(libeay32.dll、ssleay32.dll)を取得する
http://indy.fulgan.com/SSL/からダウンロードします。
執筆時点の最新版である「openssl-1.0.1e-i386-win32.zip」をダウンロードしました。
プログラム
Delphiを起動して、新しいプロジェクトを作成します。
フォームにTButtonを2つ、TMemo、TIdHTTP、TIdSSLIOHandlerSocketOpenSSLを配置します。
IdHTTP1のIOHanderプロパティにIdSSLIOHandlerSocketOpenSSL1を設定します。
Button1のOnClickイベントを追加します。
uses IdGlobal;
procedure TForm1.Button1Click(Sender: TObject);
const
// 事前準備で取得したAPI key
API_KEY: string = '…';
// 短縮するURL
LONG_URL: string = 'http://www.google.com/';
var
Url: string;
ASource: TMemoryStream;
AResponseContent: string;
begin
Url := 'https://www.googleapis.com/urlshortener/v1/url?key=' + API_KEY;
ASource := TMemoryStream.Create;
WriteStringToStream(ASource, Format('{ "longUrl": "%s" }', [LONG_URL]),
IndyUTF8Encoding);
ASource.Position := 0;
IdHTTP1.Request.ContentType := 'application/json';
IdHTTP1.Request.CharSet := 'UTF-8';
try
AResponseContent := IdHTTP1.Post(Url, ASource);
finally
Memo1.Lines.Add(AResponseContent);
ASource.Free;
end;
end;
WriteStringToStream関数を使用するために、IdGlobalユニットをusesに追加します。
WriteStringToStream関数で、送信するパラメータをStreamに書き込んでいます。
TIdHttpのPostメソッドには引数にTStringsを受け取るものがありますが、送信されるデータの書式が異なるため、使用できません。
引数にTStreamを渡す必要があります。
URL Shortener APIの結果をMemo1に出力しています。
Memo1には次のようなJSON形式の文字列が出力されます。
{
"kind": "urlshortener#url",
"id": "http://goo.gl/XXXX",
"longUrl": "http://www.google.com/"
}
Button2のOnClickイベントで、JSON形式の文字列を解析して短縮されたURLを取得します。
uses Data.DBXJSON;
procedure TForm1.Button2Click(Sender: TObject);
var
JSONObject: TJSONObject;
ShortUrl: string;
begin
JSONObject := TJSONObject.ParseJSONValue(Memo1.Text) as TJSONObject;
ShortUrl := JSONObject.Get('id').JsonValue.Value;
JSONObject.Free;
Memo1.Lines.Add(ShortUrl);
end;
JSON形式のデータを扱うクラスはData.DBXJSONユニットにあります。
usesにData.DBXJSONユニットを追加します。
TJSONObjectのParseJSONValueメソッドでJSON文字列を解析します。
キーと値のペアの書式であることはわかっているので、TJSONObjectに変換します。
取得した短縮URLはMemo1に追記しています。
プロジェクトをビルドしたら、SSLに必要なDLLを作成したアプリケーションと同じフォルダーにコピーします。
プログラムを実行してButton1、Button2を順にクリックします。