本文整理自网络,侵删。
介绍如何在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 = '…'; // 短?sURL 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。
运行应用程序
相关阅读 >>
Delphi sysutils.lastdelimiter - 判断一个字符串在另一个字符串中最后出现的位置
Delphi 将image组件的图片保存为jpg格式图片方法
Delphi firedac 下的 sqlite [5] - 数据的插入、更新、删除
Delphi sysutils.strcopy、sysutils.strecopy
Delphi clipboard 截图后将图片数据复制到剪贴板
Delphi 网上获取北京时间firedac 下的 sqlite [3] - 获取数据库的基本信息
更多相关阅读请进入《Delphi》频道 >>