Se utiliza de la siguiente manera:
twitter usuario contraseña "El nuevo estado"
El código es el siguiente (es una aplicación de consola):
program twitter; {$APPTYPE CONSOLE} uses Windows, SysUtils, Classes, Wininet, base64; function URLEncode(Str: String): String; var i: integer; begin Result:= ''; for i:= 1 to Length(Str) do if Str[i] in ['A'..'Z','a'..'z','0'..'9','-','_','.'] then Result:= Result + Str[ i ] else Result:= Result + '%' + IntToHex(Ord(Str[ i ]),2); end; function Post(Servidor, Url, Cabeceras, Parametros: String; Puerto: Word; Stream: TStream): Boolean; var hNet: HINTERNET; hCon: HINTERNET; hReq: HINTERNET; Context: DWORD; BytesRead: DWORD; Buffer: array[0..10240] of Char; begin Context:= 0; Result := FALSE; hNet := InternetOpen('Agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if (hNet <> nil) then begin FillChar(Buffer,Sizeof(Buffer),#0); hCon:= InternetConnect(hNet,PChar(Servidor),Puerto,nil,nil, INTERNET_SERVICE_HTTP,0,Context); if (hCon <> nil) then begin hReq:= HttpOpenRequest(hCon,'POST',PChar(Url),nil,nil,nil, INTERNET_FLAG_RELOAD,Context); if (hReq <> nil) then begin try if Length(Cabeceras) > 0 then Cabeceras:= 'Content-Type: application/x-www-form-urlencoded' + #13#10 + Cabeceras else Cabeceras:= 'Content-Type: application/x-www-form-urlencoded'; if HttpSendRequest(hReq,PChar(Cabeceras),Cardinal(-1), PChar(Parametros),Length(Parametros)) then begin while (InternetReadFile(hReq,@Buffer,sizeof(Buffer),BytesRead)) do begin if (BytesRead = 0) then begin Result := TRUE; break; end; Stream.Write(Buffer,BytesRead); end; end; except end; InternetCloseHandle(hReq); end; InternetCloseHandle(hCon); end; InternetCloseHandle(hNet); end; end; function UpdateStatus(Username, Password, Status: String): Boolean; var Cabeceras: String; Parametros: String; Stream: TMemoryStream; begin Cabeceras:= Username + ':' + Password; Cabeceras:= BinToStr(PByte(PChar(Cabeceras)),Length(Cabeceras)); Cabeceras:= Trim('Authorization: Basic ' + Cabeceras); Parametros:= 'status=' + UrlEncode(UTF8Encode(Status)); Stream:= TMemoryStream.Create; try Result:= Post('twitter.com','statuses/update.xml',Cabeceras,Parametros, 80,Stream); Writeln; with TStringStream.Create(EmptyStr) do try Stream.Position:= 0; CopyFrom(Stream,0); Writeln(UTF8Decode(DataString)); finally Free; end; finally Stream.Free; end; end; begin Writeln; if not UpdateStatus(ParamStr(1),ParamStr(2),ParamStr(3)) then Writeln('Error'); Writeln; end.
Y todo junto y envuelto para regalo un poco mas abajo