goo.gl(Google の短縮 URL サービス) の API を Delphi で利用する方法

Delphiでgoo.gl(Googleの短縮 URL サービス)のAPIを使って短縮URLを取得する方法を紹介します。

APIにデータを送信する方法がわかりにくかったのでまとめてみました。
JSONデータを解析する方法も参考になると思います。

事前準備

Google APIsのページでURL Shortener APIを有効にする

Google APIs Consoleにログインして、「Services」メニューを選択し、「URL Shortener API」を「Active」に変更します。

「URL Shortener API」を「Active」に変更する

API Keyを取得する

Google APIs Consoleで「API Access」メニューを選択し、「Create new Browser key」ボタンを押してAPI keyを作成する。(Referers欄は空欄のまま)

「Create new Browser key」ボタンを押す

API keyを作成する

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を設定します。

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を順にクリックします。

アプリケーションを実行する

DelphiのJSON関連の記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください