0

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 にするにはどうすればよいですか?

4

1 に答える 1