MySolusVM 0.5 beta
Published a new version of my SolusVM client application.
New version supports multiple servers, displays warnings upon an error and there is also a 64-bit version available.
Published a new version of my SolusVM client application.
New version supports multiple servers, displays warnings upon an error and there is also a 64-bit version available.
Updated my delphi twitter library and the little twitme tool.
There was a problem with the unix timestamp related to daylight savings time which just recently started here.
[download#7#format=2]
[download#7#format=1]
New version of my Twitter library for Delphi.
– xAuth/SSL support.
There are several changes in the login process, please read the usage.pas and changelog.
[download#7#format=2]
[download#7#format=1]
[download#7#format=2]
[download#7#format=1]
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;
Slightly modified my delphi twitter library to work with the latest ICS distribution and to remove the dependency of an altered OverbyteIcsHttpProt file.
[download#7#format=2]
[download#7#format=1]
2013 fix/update: http://code.google.com/p/delphi-twitter-library/
Edit: As of December 2012 Twitter api is using GZip in every callback, so you’ll have to enable content encoding before every Get/Post call, and then load the result from a gzipped stream in the RequestDone procs.
Edit June 2012: This twitter library is now deprecated and will no longer be updated. I’ve rewritten it as a generic OAuth lib to use with both Twitter and Imgur (and any other OAuth 1.0 services) for a closed source project.
This is my take on Open Auth and Twitter for Delphi. I recently had to look into it to update a twitter plugin for my Mal Upater application, so I made this small library along with a test application TwitMee. There is barely nothing at all for Delphi, and the little
I found was overcomplicated and didn’t work with Unicode (f.e. japanese symbols etc) (my library does).
I’ve been asked by a few people to make it open source, so here’s the code, use it freely as long you comply with the GPL v3 license.
Requirements: one of the latest versions of Delphi which includes Unicode. (probably easy to adapt using Jedi’s jcl implementation
for unicode strings as well).
Tokyo Expose 0.1 / May 19 2008
Little application to somewhat simulate the Mac/Linux(KDE?) effect that shows live thumbnails of all open applications on screen. The thumbnails update in real time and light up when you hover the mouse over.
Simply run it; when you hover your mouse over the TOP-RIGHT corner of the screen, the expose will activate, and:
left-clicking a window = bring it up
right-clicking a window = close that program
left-clicking the desktop window = minimize all programs
ESC = cancel
To close it, click “exit” from the tray-icon menu
Requirements: Windows Vista 32/64 bits
Download: http://techsuki.net/apps/TokyoExpose/TokyoExpose.exe
This is a very simple and lite application to index and search for files in your hard disks. Tired of the lame and cpu-intensive file search stuff in windows I decided to make my own. It needs to be manually re-indexed when you add new files but it suits my needs.
Download: http://techsuki.net/apps/TokyoFileSearch/TokyoFileSearch.exe (322 KB)
Runs in Windows 95 to Vista, either 32 or 64 bits. Does NOT require .net
Simply download and run it somewhere. It will create a file called “index.db” when you run the indexer, in the same exe folder, don’t delete it.
Consider it a beta since there is a lot to be done, it’s very raw now.. but does its job. Check back later for updates.
Click on the pictures for a bigger screenshot.
Recent Comments