تعیین تصویر دلخواه برای وضعیت یاهو در ASP.NET

23 اسفند

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" />
<%} %>

واژه ها:

.Net | ASP.NET | C#

نظرات (7) -

مصطفی مقدم
مصطفی مقدم Iran
1389/02/11 06:47:45 ب.ظ #

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

سالی سرشار از موفقیت و شادی در پیش داشته باشید.

.NetDesigner
.NetDesigner Iran
1389/03/10 11:42:39 ب.ظ #

البته راه آسونتری هم وجود داره.
به این صورت که شما محتوای مسیر زیر رو دانلود کنید.
به این شکل:
WebClient.DownloadString("opi.yahoo.com/online?u=ID&m=t&t=1";)
در صورتی که مقدار ظاهر شده 00 بود آفلاین و 01 آنلاین

پیمان روئین تن
پیمان روئین تن Iran
1389/03/12 12:51:40 ب.ظ #

بله روش شما ساده تر و بهتر است ممنون.

هادي
هادي Iran
1389/05/21 05:15:38 ب.ظ #

ببخشيد من نفهميدم بايد چيكار كنم كه عكسي كه خودم درست كردم ديده بشه ميشه كد رو كامل و يكجا بديد تا ازش استفاده كنم ، ممنون ميشم

کریم
کریم Iran
1389/05/26 02:07:37 ب.ظ #

سلام . میشه یه کمی راهنمایی کنید .
چطور باید از این کد استفده کنم . آیا میشه تو قالب میهن بلاگ ازش استفاده کرد ؟

محمود نچفی
محمود نچفی Iran
1389/07/04 03:14:24 ق.ظ #

سلام..آقا دمتون گرم .. این کدو جا دیگه میفروختن
و اما راهنمایی آقا هادی ..
2 تا عکس تو صفحه که میخوای وضعیت بذاری قرار بده..هر 2تا شو visibleشو false کن..من کد رو تو لود صفحه گذاشنم..تو هر جا دلت میخواد بذارش..اینو فضای نامو هم اضافه کن using System.Net
این کد »
        WebClient client = new WebClient();
        string yahooStatusImageUrl = "opi.yahoo.com/online;;
        if (client.DownloadString(yahooStatusImageUrl) == "01")
        {
            PicOnline.visible= true;
        }
        else
        {
            PicOffline.visible= true;
        }

محمود نچفی
محمود نچفی Iran
1389/07/04 03:17:16 ق.ظ #

شرمنده این کدرو تغییر بده :
string yahooStatusImageUrl = "opi.yahoo.com/online?u=ID&m=t&t=1";
به جای ID آیدی خودتو بنویس
اینو هم به قبل از رشته اضافه کن » http://

ارسال نظر

*
*
(پست الکترونیک، نمایه Gravatar شما را نمایش خواهد داد)

  Country flag
biuquote
  • نظر
  • پیش نمایش
Loading