another twitter library update v0.31
v0.3:
– Added a method: RetrievePIN(user,pass), with this you can avoid the user having to login and return with an access PIN, the app will retrieve it on its own by simulating a login etc. Use with care, since this method is prone to errors whenever Twitter changes something in their login and auth process. Check usage.pas for details on when to use this.
Note: reposted with a small modification to fix an error in the preauth process, redownload if you got 0.3 before.
[download#7#format=2]
[download#7#format=1]
Here’s the magic:
procedure TwitterCli.RetrievePIN(user,pass: ansistring); Var h: THttpCli; pvars,token,oatoken: ansistring; ts: TStringList; s,x: ansistring; a: Integer; begin LastReq := trRequestRawAccess; FCookie := ''; ts := TStringList.Create; h := THttpCli.Create(nil); with h do begin url := 'http://twitter.com/oauth/authorize?oauth_token='+OAuthToken; RcvdStream := TMemoryStream.Create; OnDocEnd := HTTPClientDocEnd; OnHeaderEnd := HTTPClientHeaderEnd; OnBeforeHeaderSend := HTTPClientBeforeHeaderSend; OnCookie := GrabCookie; try Get; except on e:exception do begin if DebugMode then if Assigned(DebugMemo) then TMemo(DebugMemo).Lines.Add(e.Message); ResultStrings.Text := 'Error: '+e.Message; end; end; try h.RcvdStream.WriteBuffer(#0' ', 1); h.RcvdStream.Position := 0; ts.LoadFromStream(h.RcvdStream); finally end; end; if h.StatusCode <> 200 then begin LastHttpStatus := h.StatusCode; ResultStrings.Text := 'Error in raw authentication on 1st step'; h.RcvdStream.Free; h.RcvdStream := nil; FreeAndNil(h); FreeAndNil(ts); TriggerReqDone; Exit; end; if DebugMode then if Assigned(DebugMemo) then with TMemo(DebugMemo) do TMemo(DebugMemo).Lines.Add(h.Cookie); h.RcvdStream.Free; h.RcvdStream := nil; if FCookie[length(FCookie)] = ';' then Delete(FCookie,length(FCookie),1); if DebugMode then if Assigned(DebugMemo) then with TMemo(DebugMemo) do begin TMemo(DebugMemo).Lines.Add('----------------------------------------'); TMemo(DebugMemo).Lines.Add('----------------------------------------'); end; s := ts.text; if Pos('twttr.form_authenticity_token', s) > 0 then begin Delete(s,1,Pos('twttr.form_authenticity_token',s)+32); s := Copy(s,1,Pos('''',s)-1); end else begin LastHttpStatus := 0; ResultStrings.Text := 'Error in raw authentication prelogin'; h.RcvdStream.Free; h.RcvdStream := nil; FreeAndNil(h); FreeAndNil(ts); TriggerReqDone; Exit; end; ts.Clear; with h do begin url := 'http://twitter.com/oauth/authorize'; RcvdStream := TMemoryStream.Create; SendStream := TMemoryStream.Create; pvars := ('authenticity_token=' + s + '&oauth_token=' + OAuthToken + '&session%5Busername_or_email%5D=' + user + '&session%5Bpassword%5D=' + pass); SendStream.Write(pvars[1], Length(pvars)); SendStream.Seek(0, soFromBeginning); OnDocEnd := HTTPClientDocEnd; OnHeaderEnd := HTTPClientHeaderEnd; OnBeforeHeaderSend := HTTPClientBeforeHeaderSend; Cookie := FCookie; if DebugMode then if Assigned(DebugMemo) then with TMemo(DebugMemo) do TMemo(DebugMemo).Lines.Add('Cookie before post='+FCookie); ExtraHeader := 'Origin:https://twitter.com' + #13#10 + 'Referer:http://twitter.com/oauth/authorize?oauth_token=' + OAuthToken; try Post; except on e:exception do begin if DebugMode then if Assigned(DebugMemo) then TMemo(DebugMemo).Lines.Add(e.Message); ResultStrings.Text := 'Error: '+e.Message; end; end; try h.RcvdStream.WriteBuffer(#0' ', 1); h.RcvdStream.Position := 0; ts.LoadFromStream(h.RcvdStream); finally end; x := ''; s := ts.Text; if Pos('<div id="oauth_pin">',s) > 0 then begin Delete(s,1,Pos('<div id="oauth_pin">',s)+19); s := Copy(s,1,Pos('<',s)); for a := 1 to length(s) do if (Ord(s[a]) > 47) and (Ord(s[a]) < 58) then x := x + s[a]; end; LastHttpStatus := h.StatusCode; if x = '' then LastHttpStatus := 0 else AccessPIN := x; if DebugMode then if Assigned(DebugMemo) then TMemo(DebugMemo).Lines.Add('PIN='+x); if DebugMode then if Assigned(DebugMemo) then with TMemo(DebugMemo) do begin TMemo(DebugMemo).Lines.Add(ts.Text); TMemo(DebugMemo).Lines.Add(h.Cookie); end; if h.StatusCode <> 200 then ResultStrings.Text := 'Error in raw authentication on 2nd step'; FreeAndNil(ts); h.RcvdStream.Free; h.RcvdStream := nil; h.SendStream.Free; h.SendStream := nil; FreeAndNil(h); end; TriggerReqDone; end; procedure TwitterCli.GrabCookie(Sender: TObject; const Data: string; var Accept: Boolean); begin FCookie := FCookie + Data + ';'; end;
Categories: Delphi stuff, Software
thanks for sharing,ekard 2i is nice, r4i gold,r4i sdhc is also,flash card for ds , card dsi ds card, dsi card
card ds some cartes for game console