SepidYahooStatus.dll
یکی از امکاناتی که یاهو در اختیار کاربران خود قرار داده است، امکان تعیین وضعیت یک کاربر است که با قرار دادن کد مربوط به آن و تعیین شناسه مورد نظر، وضعیت فرد با تصاویر خاص به صورت آنلاین یا آفلاین نشان داده می شود.
مثلا کد زیر وضعیت کاربر sepidweb را در یک صفحه وب نشان می دهد و کاربر با کلیک بر روی تصویر نشان داده شده می تواند از طریق یاهو مسنجر با آن کاربر ارتباط برقرار کند
<a href = 'ymsgr:sendim?sepidweb'>
<img src="http://opi.yahoo.com/online?u=sepidweb&m=g&t=14" border=0>
</a>
به طور پیش فرض یاهو 24 تصویر دارد که با تعیین پارامتر t در انتهای کد می توانیم معین کنیم کدام تصویر برای تعیین وضعیت نمایش داده شود. البته امکان دارد تعداد این تصاویر در آینده افزایش یابد.
برای دیدن این تصاویر می توان آدرس
http://opi.yahoo.com/online?u=sepidweb&m=g&t=1
را در مرورگر وارد کرد و با تغییر عدد انتهای آدرس که در آدرس بالا 1 است، باقی 23 تصویر ممکن را نیز دید.
همانطور که در ستون سمت چپ این سایت نیز مشاهده می کنید، در سایت ما تصویر دلخواهی برای تعیین وضعیت یاهو نشان داده شده است. در این پست قصد دارم نحوه نمایش یک تصویر دلخواه برای وضعیت یاهو را شرح دهم.
مراحل کار بسیار ساده است. ابتدا باید معین کنیم آیا فرد مورد نظر در یاهو آنلاین هست یا خیر. سپس براساس وضعیت فرد دو تصویر آنلاین و آفلاین دلخواه خود را نشان دهیم.
تعیین آنلاین یا آفلاین بودن ساده است. کافی است آدرس یکی از تصاویر بالا را به طور نرم افزاری درخواست کنیم، و تصویر برگردانده شده را بررسی کنیم. اگر تصویر همانی بود که به عنوان آنلاین نشان داده می شود، پس فرد مورد نظر آنلاین است.
برای این کار من از تصویر با t=5 استفاده می کنم. سپس دو تصویر آنلاین و آفلاین را در یک hex editor باز کردم تا اختلاف آن دو را مشاهده کنم. براساس اولین بایتی که اختلاف دارند معین می شود کدام تصویر برگردانده شده است.
برای t=5 دو تصویر در بایت دوازدهم با هم اختلاف دارند و تصویر آنلاین مقدار بایت دوازدهم آن 109 است.
کد زیر آنلاین یا آفلاین بودن کاربر یاهو را معین می کند
(البته با دانلود SepidYahooStatus.dll و استفاده از SepidWeb.Yahoo.IsOnline می توانید در کد خود معین کنید آیا کاربر مورد نظر آنلاین است یا آفلاین)
using System;
using System.Configuration;
using System.Web;
using System.Net;
namespace SepidWeb
{
/// <summary>
/// Gets the status of the provided yahoo id (either online or offline) in boolean. true for online.
/// </summary>
public class Yahoo
{
public static bool IsOnline(string YahooId)
{
try
{
string yahooStatusImageUrl = "http://opi.yahoo.com/online?u=" + YahooId + "&m=g&t=5";
HttpWebRequest YahooStatusRequest = (HttpWebRequest)WebRequest.Create(yahooStatusImageUrl);
YahooStatusRequest.Accept = "image/*";
YahooStatusRequest.AllowAutoRedirect = true;
HttpWebResponse YahooStatusResponse = (HttpWebResponse)YahooStatusRequest.GetResponse();
//first read 11 bytes which are equal in both online and offline streams.
for (int i = 0; i < 11; i++)
YahooStatusResponse.GetResponseStream().ReadByte();
//decide based on the different byte.
int decidingByte = YahooStatusResponse.GetResponseStream().ReadByte();
if (decidingByte == 109)
return true;
else
return false;
}
catch (WebException e)
{
//possibly theres a problem with the internet connection.
//simply show it offline.
e.ToString();
return false;
}
}
}
}
اکنون که می توانیم وضعیت یک کاربر را در یاهو تشخیص دهیم، تعیین تصاویر برای دو وضعیت آنلاین و آفلاین کار سختی نیست.
کافی است براساس یک if ساده وضعیت کاربر معین شود و سپس براساس وضعیت وی آدرس تصویر مورد نظر استفاده گردد. مثلا
<%
if(SepidYahooStatus.Yahoo.IsOnline(
"sepidweb")
{%>
<asp:Image ImageUrl=
"images/online.png" runat=
"server" />
<%}
else(){ %>
<asp:Image ID=
"Image1" ImageUrl=
"images/offline.png" runat=
"server" />
<%} %>