Twitter の新しい API 1.1 に接続し、Twitter で操作を行う Delphi の実装はありますか?
また、すべての xml サポートを削除したため、json 操作が必要です。
ツイッターサイトからの説明:
まず、次のように indy 接続を設定する必要があります。
POST /oauth2/token HTTP/1.1
Host: api.twitter.com
User-Agent: My Twitter App v1.0.23
Authorization: Basic eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn
NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 29
Accept-Encoding: gzip
grant_type=client_credentials
次に、インディを使用して Twitter の応答を取得できます。
HTTP/1.1 200 OK
Status: 200 OK
Content-Type: application/json; charset=utf-8
...
Content-Encoding: gzip
Content-Length: 140
{"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
これは簡単に見えますが、ssl を使用する必要があり、wireshark でデバッグを強制しません。
私が使用したコード:
Uses EncdDecd;
Const
Consumer_Key = 'xvz1evFS4wEEPTGEFPHBog';
Consumer_Secret = 'L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg';
Host = 'api.twitter.com/';
Request_token_URL = 'https://api.twitter.com/oauth/request_token';
Twitter_Content_Type = 'application/x-www-form-urlencoded;charset=UTF-8';
var
Response:TStream;
twittersite:TIdHttp;// assume on Form
Trace:TMemo; //assume on Form
IdSSLIOHandlerSocketOpenSSL1:TIdSSLIOHandlerSocketOpenSSL;//assume on Form
function EncodeBase64String(s: string): string;
var
sIn:TSTringSTream;
begin
sIn := TStringStream.create(s);
result := String (EncodeBase64(Sin.Memory, sIn.Size));
sin.Free;
end;
begin
Response:= TMemoryStream.Create;
try
//Headers
twittersite.Request.Host := Host;
twitterSite.Request.UserAgent := 'Fucy Town 1.0';
twitterSite.Request.CustomHeaders.Add('Authorization=Basic '+EncodeBase64String(Consumer_Key+':'+Consumer_Secret));
twitterSite.Request.ContentType := Twitter_Content_Type;
twitterSite.Request.CustomHeaders.Add('grant_type=client_credentials');
//SSL
twitterSite.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
TwitterSite.Post(Request_token_URL,response);
Trace.Lines.LoadFromStream(Response);
finally
FreeAndNil(Response);
end;
end;
この結果、401 無許可になります。
このコードを修正して 200 を OK にするにはどうすればよいですか?