PDA

View Full Version : LogIn شدن به Yahoo Messenger با دلفی



Dracula
سه شنبه 20 خرداد 1382, 09:56 صبح
با سلام خدمت همه دوستان عزیز

پیرو درخواست یکی از دوستان جهت معرفی مقاله یا کامپوننتی برای کار با پیامگیر یاهو اینجانب جستجو کردم و این مقاله رو که به همراه یک کد کامل جهت برقراری ارتباط با پیامگیر یاهو هستش رو به شرح ذیل پیدا کردم:

امید است که مفید واقع شود .

I recently came across a plethora of implementations of instant messaging protocols in C, C++ but no implementation on pascal so i decided to try to implement one so I decided to start with the yahoo messenger one (ICQ is too complicated for me)

The protocol used by yahoo is very extensive, this article covers how to login to yahoo messenger server, get buddy list, ignore list and wheter the user has mail or not, this is still very beta (it is just me working on it, so progress is very slow)

In order to implement this code you will need the Indy Internet Library or any internet library with an HTTP component that you know how to use.



<-------------------------------BEGIN UNIT CODE ------------------------------>
unit YahooLogin;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, idGlobal;

type
TForm1 = class(TForm)
HTTP: TIdHTTP;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Button1: TButton;
ListBox1: TListBox;
Label3: TLabel;
ListBox2: TListBox;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FRemoteFile: TStringList;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

const
LoginURL = 'http://msg.edit.yahoo.com/config/ncclogin?&n=1&login=%s&passwd=%s';

procedure TForm1.Button1Click(Sender: TObject);
var
Tmp, UserName, Password: String;
i, BuddyBegin, BuddyEnd: Integer;
begin
if (Edit1.Text = '') or (Edit2.Text = '') then
raise Exception.Create('Login/Password cannot be blank');

UserName := URLEncode(Edit1.Text);
PassWord := URLEncode(Edit2.Text);
Tmp := Format(LoginURL, [UserName, PassWord]);

FRemoteFile.Text := Http.Get(Tmp);

if FRemoteFile[0] = 'OK' then
begin
for i := 0 to HTTP.Response.ExtraHeaders.Count -1 do
if pos('Set-Cookie', HTTP.Response.ExtraHeaders[i]) > 0 then
begin
//We only care about the first cookie
ShowMessage('Received Cookie: '+ Copy(HTTP.Response.ExtraHeaders[i], Length('set0cookie.'), Length(HTTP.Response.ExtraHeaders[i])));
//So we break after getting the first cookie
Break
end;

//Buddy list is delimited by a BEGIN BUDDYLIST and END BUDDYLIST
BuddyBegin := FRemoteFile.IndexOf('BEGIN BUDDYLIST') +1;
BuddyEnd := FRemoteFile.IndexOf('END BUDDYLIST') -1;

for i := BuddyBegin to BuddyEnd do
//These is the "raw" buddy list parsing is needed for it to make sense
//Since this is an example I discarded this code
ListBox1.Items.Add(FRemoteFile[i]);

BuddyBegin := FRemoteFile.IndexOf('BEGIN IGNORELIST') +1;
BuddyEnd := FRemoteFile.IndexOf('END IGNORELIST') -1;

for i := BuddyBegin to BuddyEnd do
ListBox2.Items.Add(FRemoteFile[i]);

for i := 0 to FRemoteFile.Count -1 do
if pos('Mail=', FRemoteFile[i]) > 0 then
begin
Tmp := Copy(FRemoteFile[i], length('mail01'), Length(FRemoteFile[i]));
if StrToInt(Tmp) = 1 then
ShowMessage('You have a yahoo mail account')
else
ShowMessage('You dont have a yahoo mail account');
Break;
end;
end else
raise Exception.Create('Couldnt log you on');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FRemoteFile := TStringList.Create;
end;

end.
<-----------------------------END UNIT CODE--------------------------------->

<-----------------------------BEGIN FORM CODE------------------------------->
object Form1: TForm1
Left = 192
Top = 121
Width = 379
Height = 443
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 120
TextHeight = 16
object Label3: TLabel
Left = 16
Top = 136
Width = 65
Height = 16
Caption = 'Buddys list'
end
object Label4: TLabel
Left = 194
Top = 138
Width = 64
Height = 16
Caption = 'Ignore lists'
end
object Panel1: TPanel
Left = 11
Top = 3
Width = 342
Height = 113
TabOrder = 0
object Label1: TLabel
Left = 11
Top = 24
Width = 63
Height = 16
Caption = 'Username'
end
object Label2: TLabel
Left = 11
Top = 56
Width = 60
Height = 16
Caption = 'Password'
end
object Edit1: TEdit
Left = 94
Top = 18
Width = 233
Height = 24
TabOrder = 0
end
object Edit2: TEdit
Left = 96
Top = 51
Width = 233
Height = 24
TabOrder = 1
end
object Button1: TButton
Left = 139
Top = 82
Width = 75
Height = 25
Caption = 'Login'
TabOrder = 2
OnClick = Button1Click
end
end
object ListBox1: TListBox
Left = 15
Top = 160
Width = 171
Height = 239
ItemHeight = 16
TabOrder = 1
end
object ListBox2: TListBox
Left = 192
Top = 160
Width = 171
Height = 239
ItemHeight = 16
TabOrder = 2
end
object HTTP: TIdHTTP
Request.Accept = 'text/html, */*'
Request.ContentLength = 0
Request.ContentRangeEnd = 0
Request.ContentRangeStart = 0
Request.ProxyPort = 0
Request.UserAgent = 'Mozilla/4.6 (compatible; Indy Library)'
Left = 320
Top = 48
end
end
<-----------------------------END FORM CODE ------------------------------->
If anyone want to help me in the implementation of the yahoo protocol, please send me an email with the subject YahooLIB.pas, the source of this code is based upon the works of LibYahoo an open source implementation of the protocol in C, C++

موفق باشید . :wink:

Mashatan
چهارشنبه 01 مرداد 1382, 14:01 عصر
پیشنهاد میکنم حتما اینجا رو یک نگاه بندازید !
http://www.chat-help.co.uk/~ymlite/
من خودم با استفاده از Source این برنامه فسقلی تونستم یکYahoo Robot بنویسم که کاملا قابل برنامه ریزی هست !
فکر کنم URL ش اینجاست !
http://homepages.ihug.com.au/~cjdelphi/ymlitecompact.zip

ارادتمند مشاطان

Dracula
چهارشنبه 01 مرداد 1382, 22:12 عصر
دوست عزیز . متاسفانه دانلود نمیشه . :cry:

Mashatan
چهارشنبه 01 مرداد 1382, 22:26 عصر
ای بابا نا امید نباش :)
من قبلا گرفتم الان گذاشتم روی Host م میتونی دریافت کنی !
http://ams.free-host.com/delphi/ymlitecompact.zip
در ضمن با KOL نوشته شده و ممکنه کداش یکی عجیب غریب باشه باید زیاد باهاش ور بری .

ارادتمند مشاطان

Farhad.B.S
جمعه 03 مرداد 1382, 20:25 عصر
سلام.
میشه یه آدرسی از این کامپوننت های KOL رو بدید .من به سایت شرکت سازنده هم رفتم ولی کامپوننت هایی رو که در برنامه ازشون استفاده شده بود رو نتونستم پیدا کنم !!؟
ممنون. :roll:

Mashatan
جمعه 03 مرداد 1382, 21:59 عصر
خوب اول سایتش رو بگم که اینجاست !
http://bonanzas.rinet.ru
بدم اینکه باید یک Define به اسم KOL_MCK وجود داره که با حذف اون از TForm استفاده میکنه ولی با این وجود باید Component های MCK رو حتما نصب کنید !! :wink:
در هر صورت پیشنهاد میکنم چون KOL در Design بکار رفته ، بهتره دستی خودتون کد های مربوط به Login شدن Yahoo رو بیرون بکشید ! که خیلی ساده هست در ضمن این فقط برای Chat هست و اگر میخواید PM ها Invisible و ... سایر امکاناتش رو بکار بگیرید باید با یک Sniffer خود Yahoo Messenger رو Monitor کنید تا کد ها شو بدست بیارید !

ارادتمند مشاطان

esf
شنبه 04 مرداد 1382, 18:15 عصر
اگه میشه یک لینک هم برا این مورد بزار :))

راستی با اگزه خودش هم نتونستم به یاهو وصل بشم )):
تاحالا فقط اون سورسی که از طریق وب به یاهو وصل میشده خوب بهم جواب داده ...

پیوست :
از نامه های باحالت ممنون خیلی داره کمک میکنه @ دمت خیلی گرم

Mashatan
شنبه 04 مرداد 1382, 19:55 عصر
من قسمت Login شدن به yahoo رو که قبلا نوشته بودم اینجا قرار دادم !
http://ams.free-host.com/delphi/Yahoo.zip
و میتونید استفاده کنید این فقط Login میکنه و Status رو عوض میکنه !
در ضمن باید کامپوننت ICS - Internet Component Suite رو دریافت کنید
و آدرسش اینجاست !
http://www.overbyte.be
http://www.rtfm.be/fpiette/indexuk.htm
http://users.swing.be/francois.piette/indexuk.htm
اگر اینجا ها نتونستید Download کنید توی Torry.net حتما میتونید :)

این اولین برنامه تستی بود که باهاش وصل شدم به Yahoo برای همین زیاد ترو تمیز نیست
امیدوارم بدردت بخوره !

اراتمند مشاطان

oracle
جمعه 10 مهر 1383, 00:15 صبح
حاج علی سلام
من هرچه قدر سعی کردم این فایل هارو دانلود کنم نتونستم
:cry:


من قسمت Login شدن به yahoo رو که قبلا نوشته بودم اینجا قرار دادم !
http://ams.free-host.com/delphi/Yahoo.zip


من قبلا گرفتم الان گذاشتم روی Host م میتونی دریافت کنی !
http://ams.free-host.com/delphi/ymlitecompact.zip
در ضمن با KOL نوشته شده و ممکنه کداش یکی عجیب غریب باشه باید زیاد باهاش ور بری .

واسه دانلود کردنشون التماس دعا دارم. :oops: :oops: :wink:

oracle
جمعه 10 مهر 1383, 00:21 صبح
البته الان نزدیک یک سال هست که این بحث شروع شده ولی من خیلی علاقه مند به این کارم .

saeed_82
جمعه 10 مهر 1383, 19:45 عصر
این لینک ها که گذاشته شده اصلا کار نمی کنه
جواب نمیده

jirjirakk
جمعه 10 مهر 1383, 22:38 عصر
جناب اوراکل من در سطح خیلی کوچک این کار رو انجام دادم

اول از همه احتیاج به یک اسنیفر داری که پکت های ارسالی یاهو مسنجر رو برای حالت های مختلف اسنیف کنی
و پترن هر کدومشون رو بدست بیاری تا بتونی یه همچین کارایی بکونی

برای لوگین شدنش هم یکی از این بیگانه ها زحمت نوشتن دی ال ال رو کشیدن و میتونید با اون به اندرون یاهو لوگین کنید و ..........

jirjirakk
جمعه 10 مهر 1383, 22:40 عصر
یه نیمچه سورس هم دارم اگه خواستی بگو تو بک آپ هام دنبالش بگردم ببینم هست یا نه

oracle
جمعه 10 مهر 1383, 22:43 عصر
یکی از این بیگانه ها زحمت نوشتن دی ال ال رو کشیدن و میتونید با اون به اندرون یاهو لوگین کنید

جناب جیرجیرک می تونید در این مورد بیشتر توضیح بدهید و در ضمن علاقمند به یک Example و خود دی ال ال هم هستم که اسمش رو بدونم.