Ir al contenido


Foto

Actualizar estado de twitter


  • Por favor identifícate para responder
9 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 15 enero 2010 - 05:35

Pues jugando un poco llegue a esta pequeña aplicación que nos permite actualizar el estado de twitter desde la linea de comandos.

Se utiliza de la siguiente manera:


delphi
  1. twitter usuario contraseña "El nuevo estado"



El código es el siguiente (es una aplicación de consola):


delphi
  1. program twitter;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Windows, SysUtils, Classes, Wininet, base64;
  7.  
  8. function URLEncode(Str: String): String;
  9. var
  10.   i: integer;
  11. begin
  12.   Result:= '';
  13.   for i:= 1 to Length(Str) do
  14.     if Str[i] in ['A'..'Z','a'..'z','0'..'9','-','_','.'] then
  15.       Result:= Result + Str[ i ]
  16.     else
  17.       Result:= Result + '%' + IntToHex(Ord(Str[ i ]),2);
  18. end;
  19.  
  20. function Post(Servidor, Url, Cabeceras, Parametros: String; Puerto: Word;
  21.   Stream: TStream): Boolean;
  22. var
  23.   hNet: HINTERNET;
  24.   hCon: HINTERNET;
  25.   hReq: HINTERNET;
  26.   Context: DWORD;
  27.   BytesRead: DWORD;
  28.   Buffer: array[0..10240] of Char;
  29. begin
  30.   Context:= 0;
  31.   Result := FALSE;
  32.   hNet := InternetOpen('Agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  33.   if (hNet <> nil) then
  34.   begin
  35.     FillChar(Buffer,Sizeof(Buffer),#0);
  36.     hCon:= InternetConnect(hNet,PChar(Servidor),Puerto,nil,nil,
  37.       INTERNET_SERVICE_HTTP,0,Context);
  38.     if (hCon <> nil) then
  39.     begin
  40.       hReq:= HttpOpenRequest(hCon,'POST',PChar(Url),nil,nil,nil,
  41.         INTERNET_FLAG_RELOAD,Context);
  42.       if (hReq <> nil) then
  43.       begin
  44.         try
  45.           if Length(Cabeceras) > 0  then
  46.             Cabeceras:= 'Content-Type: application/x-www-form-urlencoded'
  47.               + #13#10 + Cabeceras
  48.             else
  49.               Cabeceras:= 'Content-Type: application/x-www-form-urlencoded';
  50.           if HttpSendRequest(hReq,PChar(Cabeceras),Cardinal(-1),
  51.             PChar(Parametros),Length(Parametros)) then
  52.           begin
  53.             while (InternetReadFile(hReq,@Buffer,sizeof(Buffer),BytesRead)) do
  54.             begin
  55.               if (BytesRead = 0) then
  56.               begin
  57.                 Result := TRUE;
  58.                 break;
  59.               end;
  60.               Stream.Write(Buffer,BytesRead);
  61.             end;
  62.           end;
  63.           except end;
  64.         InternetCloseHandle(hReq);
  65.       end;
  66.       InternetCloseHandle(hCon);
  67.     end;
  68.     InternetCloseHandle(hNet);
  69.   end;
  70. end;
  71.  
  72. function UpdateStatus(Username, Password, Status: String): Boolean;
  73. var
  74.   Cabeceras: String;
  75.   Parametros: String;
  76.   Stream: TMemoryStream;
  77. begin
  78.   Cabeceras:= Username + ':' + Password;
  79.   Cabeceras:= BinToStr(PByte(PChar(Cabeceras)),Length(Cabeceras));
  80.   Cabeceras:= Trim('Authorization: Basic ' + Cabeceras);
  81.   Parametros:= 'status=' + UrlEncode(UTF8Encode(Status));
  82.   Stream:= TMemoryStream.Create;
  83.   try
  84.     Result:= Post('twitter.com','statuses/update.xml',Cabeceras,Parametros,
  85.       80,Stream);
  86.     Writeln;
  87.     with TStringStream.Create(EmptyStr) do
  88.     try
  89.       Stream.Position:= 0;
  90.       CopyFrom(Stream,0);
  91.       Writeln(UTF8Decode(DataString));
  92.     finally
  93.       Free;
  94.     end;
  95.   finally
  96.     Stream.Free;
  97.   end;
  98. end;
  99.  
  100. begin
  101.   Writeln;
  102.   if not UpdateStatus(ParamStr(1),ParamStr(2),ParamStr(3)) then
  103.     Writeln('Error');
  104.   Writeln;
  105. end.



Y todo junto y envuelto para regalo un poco mas abajo  ;)

Archivos adjuntos


  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 15 enero 2010 - 05:38

Y por si alguien lo quiere probar y no le compila (la función UTF8Decode no se incluye en Delphi 7) dejo por aquí el programa ya compilado.

Archivos adjuntos


  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 15 enero 2010 - 05:46

Genial amigo seoane :), una pregunta, ¿ que es lo que se debe "pasar" en el parámetro status ?

Salud OS
  • 0

#4 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 15 enero 2010 - 05:56

¿ que es lo que se debe "pasar" en el parámetro status ?

Me parece que tu eres casi tan novato como yo usando el twitter, y yo me acabo de registrar hoy  :D

El "status" son las entradas de texto, de 140 caracteres como máximo, que se envían para ser  publicadas. Ese es el nombre que se le da en la API de twitter, pero creo que por ahí los conocen como "tweets", para mi es lo que se envía en el cuadro de texto de la pagina de twitter justo debajo de la pregunta  What’s happening?  :D
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 15 enero 2010 - 06:01

:D :D :D es que me confundió eso de Status. Ya caigo :)

Salud OS
  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 15 enero 2010 - 06:17

Buen trabajo  (y).

Y por si alguien lo quiere probar y no le compila (la función UTF8Decode no se incluye en Delphi 7) dejo por aquí el programa ya compilado.


¿De donde sacaste la función UTF8Decode? ¿Se incluye en versiones mayores de delphi 7?

Saludos.
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 15 enero 2010 - 06:19

Yo tengo Turbo Delphi que es 2006 y ya la trae incluida.

Salud OS
  • 0

#8 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 15 enero 2010 - 06:28

Pues mirándolo mejor, si viene en mi delphi 6 y delphi 7, donde no viene es en mi Builder 5  :( aunque si viene en el Builder 6  :D.

Saludos.
  • 0

#9 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 15 enero 2010 - 06:42

Pues mirándolo mejor, si viene en mi delphi 6 y delphi 7, donde no viene es en mi Builder 5  :( aunque si viene en el Builder 6  :D.

Pues para los que no la tengan una alternativa:


delphi
  1. function Utf8Decode2(Src: String): String;
  2. var
  3.   Size: Integer;
  4.   Str: PWChar;
  5. begin
  6.   Size:= MultiByteToWideChar(CP_UTF8,0,PChar(Src),
  7.     Length(Src),nil,0);
  8.   if Size > 0 then
  9.   begin
  10.     GetMem(Str,(Size+1)*Sizeof(WideChar));
  11.     FillChar(Str^,(Size+1)*Sizeof(WideChar),#0);
  12.     try
  13.       if MultiByteToWideChar(CP_UTF8,0,PChar(Src),
  14.         Length(Src),Str,Size) > 0 then
  15.       begin
  16.         Result:= WideString(Str);
  17.       end;
  18.     finally
  19.       FreeMem(Str);
  20.     end;
  21.   end;
  22. end;


  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 15 enero 2010 - 06:47

Ah vaya, pues tengo mi Delphi 4 :o que le va a venir muy bien esa función :D :D :D

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.