介绍如何在Delphi中使用goo.gl(Google的缩短URL服务)API获得缩短的URL。
由于很难理解如何将数据发送到API,因此对其进行了总结。
我认为分析JSON数据的方法会有所帮助。
提前准备
在Google API页面上启用URL Shortener API
登录到Google API控制台 https://code.google.com/apis/console/,选择“服务”菜单,然后将“ URL缩短器API”更改为“有效”。
将“ URL缩短器API”更改为“有效”
获取API密钥
在Google API控制台 https://code.google.com/apis/console/中选择“ API访问”菜单,然后单击“创建新的浏览器密钥”按钮以创建API密钥。(“引荐来源”字段留空)
按下“创建新的浏览器键”按钮
创建一个API密钥
获取SSL所需的DLL(libeay32.dll,ssleay32.dll)
从百度搜索自己下载。
程序
启动Delphi并创建一个新项目。
在窗体上放置两个TButton,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;
添加一个IdGlobal单元以用于使用WriteStringToStream函数。
使用WriteStringToStream函数将要发送的参数写入流。
某些TIdHttp Post方法接受TString作为参数,但是由于传输数据的格式不同,因此无法使用它们。
TStream必须作为参数传递。
将URL Shortener API结果输出到Memo1。
以下JSON格式字符串输出到Memo1。
{
"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单元中。
添加要使用的Data.DBXJSON单元。
使用TJSONObject的ParseJSONValue方法解析JSON字符串。
我知道这是键/值对格式,因此我将其转换为TJSONObject。
获取的缩短的URL被添加到Memo1。
生成项目后,将SSL所需的DLL复制到与创建它的应用程序相同的文件夹中。
运行该程序,然后单击Button1,Button2。
运行应用程序