آیا امکان برقراری ارتباط با Yahoo Messenger در دلفی وجود داره؟
مثلا هنگامی که کاربر log On است متنی توسط برنامه ی دلفی به کاربری فرستاده شود؟
آیا امکان برقراری ارتباط با Yahoo Messenger در دلفی وجود داره؟
مثلا هنگامی که کاربر log On است متنی توسط برنامه ی دلفی به کاربری فرستاده شود؟
راه ساده و کارامد اون استفاده از توابع API
FindWindow هست. یعنی اول پنجره ی YahooMessenger رو پیداه کنی
بعدش پنجره ی ورود متن رو پیدا کنی وبعدش با استفاده از SendMessege به
پنجره متن بدی بعد دکمه ی Send رو به صورت مجازی با استفاده از SendMesseg
کلیک کنی.
توی Help دلفی بگردی همه چیز و توضیح داده.
اصل کار با توابع API
ّFindWindow
SendMessge
هست.
موفق باشید.
یا حق.
راه ساده و کارامد اون استفاده از توابع API
FindWindow هست. یعنی اول پنجره ی YahooMessenger رو پیداه کنی
بعدش پنجره ی ورود متن رو پیدا کنی وبعدش با استفاده از SendMessege به
پنجره متن بدی بعد دکمه ی Send رو به صورت مجازی با استفاده از SendMesseg
کلیک کنی.
توی Help دلفی بگردی همه چیز و توضیح داده.
اصل کار با توابع API
ّFindWindow
SendMessge
هست.
فرضا اگه من اینا رو بدونم از کجا بفهمم کاربر داره با کی می چته ؟
ثانیا اگه به یک کاربر دلخواه خواسته باشیم ÷یام بفرستم تکلیف چیه؟
کلیه قابلیتهای یاهو مسنجر من جمله Voice و Video بصورت تعدادی COM Library پیاده سازی شده اند ؛ کافیه کلاسهای مورد نظرت رو به پروژهء دلفی ات وارد کنی و ازشون استفاده کنی . یاهو مسنجر در عمل فقط یک GUI برای این کلاسهاست و میشه با استفاده از امکانات این کلاسها رابطهائی به مراتب بهتر یا پیچیده تر یا اختصاصی طراحی کرد .
سلام
البته خیلی هم رابطه ساده ای نیست بدبخت
ولی بجز ایمپورت کردن Type Library ها تا این اواخر که من میدونم یاهو وب سرویس هم داشت که از طریق اون هم میتونی این کار رو بکنی فکر کنم Yahoo Messenger Protocole بگردی یک چیزی پیدا کنی
Document های پیوست رو بخون
در مورد Yahoo Messenger Protocol هست.
لینک یه تاپیک اینجاست به این تاپیک برو به Messenger قوی Yahoo که متن باز هست
معرفی شده میتونی از متن برنامه این Messenger استفاده کنی.
http://www.barnamenevis.org/sh...ad.php?t=44267
آخرین ویرایش به وسیله SH.Daneshvar : پنج شنبه 07 اردیبهشت 1385 در 08:21 صبح
سوس این مسنجر به چه زبانی بود؟
ما که چیزی ندیدیم
یا RPM است یا EXE
دوست عزیز
همون فایل های rpm یک فایل فشرده حاوی Source این مسنجر هست.
اینم لینک دانلود Source :
http://prdownloads.sourceforge.net/g...c.rpm?download
آخرین ویرایش به وسیله SH.Daneshvar : جمعه 08 اردیبهشت 1385 در 15:28 عصر
کسی می تونه اونو به پاسکال تبدیل کنه؟!!!!
دوست عزیز
فکر کنم کار خودته باید الگوریتم کار رو بفهمی سپس اون رو به پاسکال بنویسیش.
البته کار راحتیم نیست.
قبلا از اینکار ها کردم.
موفق باشی.
یا حق.
کسی نظر دیگری نداره که بشه فقط به طور ساده و نه خیلی پیشرفته و فقط در حد یک پیام ساده بتونیم با مسنجر ارتباط برقرار کرد؟
نظر "دیگر"ی در این تاپیک درج نشده ، تنها گزینه ات همان راهی است که صفحه قبل نوشتم و بهش دقت نکردی . سایر پیشنهادات غیر فنی هستند .
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
خوب بگید چه جوری باید این کلاسها رو پیدا کنم و چه گونه از اونها در برنامم استفاده کنم
اگر سورس اماده دارید دریغ نفرمایید
متشکر م
البته ایمپورت کردن Object Com برای دستگاهی که مطمئنی روش یاهو مسنجر هست روش بسیار خوبیه ولی سایر روشها من جمله استفاده از WebService نتنها غیر فنی نیست بلکه جزو روشهای توصیه شدست.
برای اینکه مطمئن هم بشی خیلی غیر فنی نیست این کدی رو که 2-3 سال پیش برای دلفی 6 داشتم رو برات میزارم ایده بگیری :
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;
توی این کد Http یک IdHttp هست
علت غیر فنی بودن روشت ماهیت متغیر پروتکلهای مورد استفادهء یاهو و همینطور محدودیت وب هست ، در حقیقت ساده ترین و کاملترین روش اتصال به یاهو همان COM Library اش هست که براحتی همراه نرم افزار قابل انتشاره و نیازی به نصب خود مسنجر نیست .
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
اگر تغییر پروتکلی حاصل بشه حتما Com Object هم باید آپدیت بشه ، ضمنا کاملا درسته لازم نیست یاهو مسنجر نصب باشه شما میتونید کل آبجکت رو کنار برنامتون اینور اونور کنید ، یک برنامه کوچک 4-5 مگی فقط برای فرستادن مسیج که حتما نیاز به نوشتن برنامه نصب هم داره .
ولی کاملا درسته که روش ساده تر و سریعتریه ولی از دید "فنی" حتما روش بهتری نیست
مگر اینکه در تعریف فنی با هم خیلی اختلاف نظر داشته باشیم.
نسخه های قدیمی یاهو مسنجر پس از هر تغییر به آپدیت نیاز داشتند اما نسخه های جدیدتر اینطور نیستند . من یکی از برنامه هائی که برای اتصال به یاهو مسنجر با استفاده از libyahoo2 نوشته ام رو لااقل هر فصل یکبار آپدیت میکنم ، کدهای لازم برای پروتکل تغییر داده شده همراه هر نسخه منتشر میشن و در فواصل زمانی غیر قطعی تغییر میکنن ؛ پس استفاده از COM Library یاهو تنها روش عملی است ، که در نتیجه تنها روش فنی است . بگذریم از اینکه انالیز دائمی پروتکل و نوشتن برنامه مستقل یا مبتنی بر وب ، نمیتونه از تمام قابلیتهای مسنجر استفاده کنه . همانطور که گفتم خود یاهو مسنجر هم صرفا" یک رابط کاربری ساده برای همین کتابخانه است و میشه به کمکش کدهای بهتری نوشت .
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
چون جدیدا هیچ کاری در این ضمینه ها نکردم نمیتونم در مورد استدلالت جوابی بدم (چون هیچ اطلاعی ندارم) ولی صحبتهات در مورد عوض شدن پروتکل وب و پخش شدن کدهای لازم برای تغییر در آبجکت (و حتما پخش نشدن کدهای پروتکل وب!) و کلا اینکه تو دنیایی که همه دارند به سمت وب سرویس میرن همچین سوتیهایی از یاهو بعیده ، چندان برام پذیرفتنی نیست .
ضمنا تعریف من از فنی اصلا عملی نیست اتفاقا خیلی کارها با خیلی روشها غیر فنی عملی میشن .
به هر حال اگه یک روزی گذرم اینورا خورد و چیزی تو این ضمینه خوندم ،شاید یک ریپلای زیر ایمن تاپیک زدم
راستی چه عکس باحالیه تازه بهش دقت کردم.
مفهوم وب سرویس ارتباطی با قابلیتهائی که از یک مسنجر صوتی و تصویری مانند یاهو انتظار میره نداره . حرف زدن از وب سرویس ، به معنای امکان جاگزین کردن هر چیزی با یک پروتکل مبتنی بر وب نیست ؛ وجود یک درک ابتدائی از نحوهء عملکرد سرویسهای وب برای این منظور کافیه .
این سوتی یاهو نیست . قاعده اش هست . در حال حاضر هیچ Web Service ای برای استفاده از قابلیتهای یاهو مسنجر وجود نداره . آنچه که هست ، صحبت کردن با سرور وب از طریق یک وب کلاینت است که تلاش میکنه وب کلاینت چت یاهو رو شبیه سازی کنه ، که هیچ ارتباطی با یک سرویس وب نداره . از آنجائیکه تنها روش کاربردی و عملی استفاده از COM Library است بدون پرداخت هزینه های بی ربط ، این تنها روش فنی است و به بحث بیشتری نیاز نداره . دلیل استفادهء من از libyahoo2 پلت فرم برنامه ای بود که نوشتم ( freebsd ) و برای نوشتن یک برنامه ویندوز متصل به سرویس یاهو ، روش فنی استفاده از COM و بقیه روشها استفاده از مهندسی معکوس پروتکل و یک پیاده سازی مستقل هستند که محدودیتهاش ذکر شد .
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
از توضیح کاملتون در مورد وب سرویس ممنونم خیلی دیدمو باز کرد، جالبه که بحث فرستادن یک پیام رو که براحتی میشه با سرویس وب (نه وب سرویس ) بدون لینک کردن یک لایبرری چند مگی به برنامه انجام بدیم رو به بحث در مورد سرویس صدا و تصویر ربط میدین!
هزینه بی ربط هم یعنی همی لینک کردن یک فایل با حجم بالا به برنامه . از اونجایی که کلاینت یاهو مسنجر رو با انهمه امکانات (از RichView قدرتمندش گرفته با قابلیت هاست فلش و پشیبانی از اینهمه امکانات دیگه تا اینکریپشن و نگهداری مکالمات و تعداد زیادی تنظیمات Defineable و امکان استفاده از "وب سرویسهای" یاهو و .....) یک کلاینت ساده میدونید ،
آخرین ویرایش به وسیله Inprise : شنبه 09 اردیبهشت 1385 در 23:59 عصر
اگه به توضیحات قبلی کمی دقت کنی ، متوجه دو نکته بدیهی میشی :
الف- تغییر غیر قطعی پروتکلهای یاهو باعث میشه هیچ کد مستقل و قابل اتکائی قابل توسعه نباشه . چه از طریق وب کلاینت با یاهو حرف بزنی ، و چه از طریق تحلیل پروتکل ، در هر حال ، چون کد مذکور در معرض تغییره ، این صورت مسئله نمیتونه جواب کاملی داشته باشه . دقیقا" به همین منظور ، یاهو COM اش رو منتشر کرده . استفاده از یک Type Library ساده نیازی به لینک سه لایبراری یاهو ( به ترتیب 450 و 600 و 780 کیلوبایت ! ) نداره ؛ کافیه روی منوهای دلفی دو سه تا کلیک کنی ، و بعد از اتمام پروژه برنامه ات رو با Installer مورد علاقه ات Deploy کنی . ضمن اینکه بدین ترتیب میشه بسادگی از محیط RAD دلفی یا سایر بسترها استفاده کرد .
ب- منظور از "یک رابط کاربری ساده" این هست که یاهو مسنجر ، در عمل کار پیچیده یا منحصر به فردی انجام نداده ، و چیزی نیست بجز یک رابط برای کتابخانه اش . بسته به نوع کاربرد - که میتونه ساده باشه مثل یک ارسال پیام یا میتونه ساده نباشه - میشه رابطهائی به مراتب پیچیده تر و اختصاصی تر طراحی کرد ؛
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
حالامی شه یک کم از Com بگی
کام ابجکتز همون ActiveX ها هستن که در تمام برنامه نویسی ها میشه ازشون استفاده کرد . برای نصب کردن یک کام به صورت کامپاننت در دلفی می تونید از پنجره Components از ActiveX Install استفاده کنید .
خوب حالا من می خوام از com مسنجر استفاده کنم چه جوری می تونم اونو نصب کنم.
لطفا این مساله را فراموش نکنید هنوز برای من حل نشده
اشتباه میکنی اگر منتظری کسی برات کد بنویسه . راهنمائی ها و توضیحاتی که داده شده برای شروع کافیه ؛ باید بتونی از راهنمائی های حداقل موجود روی فروم برای نصب و استفاده از اکتیواکسها و کلاسهای COM استفاده کنی ؛
UNIX is simple. It just takes a genius to understand its simplicity
-- Dennis Ritchie
برنامه نویس باید خلاقیت داشته باشه . تازه بعضی چیزا هست مثل این ما فقط و فقط میتونیم راهنمایی اصول کلی کنیم . استفاده با خودت و گوگل و هلپ کامل دلفی .
اینم یه کامپاننتاش ::
مراحل زیر را طی کن ::
البته ببخشید چون من الان دیگه فقط با BDS4.0 کار می کنم .
به ترتیب دنبال کنید .
من این کارو انجام دادم اما نتونستم با مسنجر ارتباط برقرار کنم
دقیقا کدام ActiveX باید نصب کنم؟
به نظرتون به جای این سه صحفه این خوب نبود ؟
http://www.google.com/search?hl=fa&q...ahoo+messenger
یا امثال اینا .
مثال اینا بهتره
کسی مثالی نداره؟
آقای Delphi SkyLine من منتظر یک مثال از جانب شما می مانم.
اینو برات می نویسم اما بدون گشتنش زیاد سخت نبود و اگه خودتون می گشتید موفق تر بودید . به هر حال ::
<-------------------------------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 ------------------------------->
موفق باشید.
آره اینو من تو یکی از سایتها دیدم اما نتونستم باهاش کار کنم
شما از اون استفاده کردید؟
بهتر نیست این بحث را رهاش نکنیم؟
نه . چون دیگه فکر کنم باید شما هم کمی بگردی .
شما می تونید سورس یه YahooRobot رو پیدا کنی . البته آقای مشاتان نوشته بودن اما پولیه ها .
شما ابتدا بخش ActiveX ها رو باید مطالعه کنید و دیگر اینکه با یک ActiveX کد نویسی کنید و یک برنامه ایجاد کنید برای شروع متوجه کار خواهید شد ...
xPDF Viewer رو تو فوروم سرچ کنید ...
یا حق !!!