PDA

View Full Version : سوال: گرفتن خبر از سایتی دیگر



طبیب دل
شنبه 25 تیر 1390, 12:04 عصر
با سلام به دوستان
چطور میتونم اطلاعاتی نظیر قیمت طلا ، آهن ، و مواردی از این قبیل رو از سایتی دیگر بگیرم و به صورت یک خط که از چپ به رست حرکت میکنه در سایتم نمایش دهم؟

salehbagheri
شنبه 25 تیر 1390, 12:12 عصر
یکی از روشهای اینکار، دریافت WebService از اون سایت هستش! البته اگه ارائه بده ...

بدین صورت که با Add کردن اون WebService به پروژه خودتون، از امکانات ارائه شده اون سرویس استفاده میکنید.

ParsaNM
شنبه 25 تیر 1390, 12:17 عصر
دوست عزيز ميتوني يه مقدار بيشتر توضيح بدي لطفا ...!
ما تازه وارد ها خوب شير فهم نميشيم ..!

طبیب دل
شنبه 25 تیر 1390, 12:17 عصر
چطوری بفهمم که webService داره یا نه و اگه داره چه طوری بگیرم.
از توجهتون ممنونم ولی اگه ممکن هست برای ما تازه کارها کمی کامل تر توضیح دهید باز هم سپاسگزارم

salehbagheri
شنبه 25 تیر 1390, 13:17 عصر
در این مورد زیاد بحث شده!

دوتا مقاله خلاصه رو لینک میکنم امیدوارم مفید باشه ...

نحوه ایجاد وب سرویس (http://how2learnasp.net/article.aspx?code=bf2208b0-ee3f-4999-8b24-f5330043aceb)

نحوه استفاده از وب سرویس (http://how2learnasp.net/article.aspx?code=f132d03a-bfa9-4f27-96ce-d7d20cca0ae1#)

raziee
شنبه 25 تیر 1390, 13:23 عصر
وب سرویس امکانی هست که بوسیله ی اون میتونید توسط برنامه های دیگه (مثلا یه سایت دیگه یا یه برنامه ی تحت کلاینت) به نرم افز وصل بشید و تراکنش هایی رو انجام بدید.
این امکان باید توسط برنامه نویس ایجاد بشه و در اختیار دیگران قرار بگیره.
اینکه آیا نرم افزار مورد نظر شما وب سرویس داره یا نه رو باید از واحد فنی اون سایت بپرسید. اگر داشت و در اختیارتون قرار داد مینید ازش استفاده کنید.

راه دیگه که زحمت شما رو زیاد میکنه استفاده از RSS اون سایت هست.
معمولا سایت های خبری یک RSS دارند که شما میتونید یک RSS Reader بنویسید و اون RSS رو در برنامه ی خودتون بخونید و ازش استفاده کنید. RSS در واقع یک XML با فرمت خاص هست.

طبیب دل
شنبه 25 تیر 1390, 13:45 عصر
دوستان آیا با rss میشه خبرهایی رو از سایت دیگر گرفت و در سایت خودمون نمایش بدیم؟
اگر جواب مثبت است چگونه؟

raziee
شنبه 25 تیر 1390, 13:50 عصر
دوستان آیا با rss میشه خبرهایی رو از سایت دیگر گرفت و در سایت خودمون نمایش بدیم؟
اگر جواب مثبت است چگونه؟
بله میشه. در پست قبل از پست شما ذکر کردم.
این پروژه (http://www.codeproject.com/KB/cs/rssreader.aspx) رو ببینید.

طبیب دل
شنبه 25 تیر 1390, 13:57 عصر
بله میشه. در پست قبل از پست شما ذکر کردم.
این پروژه (http://www.codeproject.com/KB/cs/rssreader.aspx) رو ببینید.
بله حق با شماست. ببخشید، دیر متوجه پستتون شدم

iman_ad
شنبه 25 تیر 1390, 22:22 عصر
برای این کار rss مناسب تر است.

A.S.Roma
یک شنبه 26 تیر 1390, 11:54 صبح
در مواردی هم که سایت مذکور سرویسی ارائه نمیکنه میشه مستقیما" از روی سایتشون خوند . در مورد نرخ ارز و طلا و سکه و ... این کار رو یه زمانی کردم :D

طبیب دل
یک شنبه 26 تیر 1390, 13:20 عصر
در مواردی هم که سایت مذکور سرویسی ارائه نمیکنه میشه مستقیما" از روی سایتشون خوند . در مورد نرخ ارز و طلا و سکه و ... این کار رو یه زمانی کردم :D
دوست عزیر اگر لطف کنی اوی کاری رو که یه زمانی کردی به من هم بگی چی کارکردی خیلی ممنون میشم
آخه پای آبرو در میون
با تشکر

Himalaya
یک شنبه 26 تیر 1390, 16:50 عصر
سلام.
فقط جهت اینکه کارت راه بیفته (بدون rss و وب سرویس) این تیکه کد سورس سایت مورد نظر شما رو دریافت میکنه و توسط regular exprinsion اون رو تحلیل میکنه.
اینم بگم که بخش pattern رو همینطوری نوشتم که فقط جواب بده (احتمالا الگوی بهتری هم بشه واسش درآورد))
ضمن اینکه این pattern واسه دریافت لینکهای گفته شده تو سایت esteghlali.com نوشته شده و تو سایت مورد نظر شما دیگه کاربرد نداره. پس اگه خواستید رو یه سایت دیگه ازش استفاده کنید باید pattern رو مطابق سورس همون سایت تغییر بدید


protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string content = string.Empty;
string address = "http://www.esteghlali.com/";

using (WebClient wc = new WebClient())
{
Literal1.Text = string.Empty;
wc.Encoding = Encoding.UTF8;
content = wc.DownloadString(address);
MatchCollection mc = Regex.Matches(HttpUtility.HtmlEncode(content),
@"<span style='font\-size:14px;font\-weight:bold'>(\s)*(.*)(\s)*</span>",
RegexOptions.Compiled);
int i = 0;
foreach (Match item in mc)
{
Literal1.Text += "لینک" + (++i).ToString() + ": " +
HttpUtility.HtmlDecode(item.Value + "<br />");
}
}
}
}


<div style="text-align: right; direction:rtl; font-family:Tahoma;">
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>

و نتیجه میشه دریافت اون لینکهایی که تو سایت استقلالیها قرار گرفته

http://amir-ajorlo.ir/MyUpFile/barnamenevis/es.jpg


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

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string content = string.Empty;
string address = "http://aftabnews.ir/vdcfjxdyyw6dm1a.igiw.html";

using (WebClient wc = new WebClient())
{
wc.Encoding = Encoding.UTF8;
content = wc.DownloadString(address);
Match item = Regex.Match(HttpUtility.HtmlEncode(content),
@"&lt;div id='doc_div9'&gt;(\s)*(.*)(\s)*&lt;/div&gt;",
RegexOptions.Compiled);
Literal1.Text = HttpUtility.HtmlDecode(item.Value).Replace("آفتاب:", "");
}
}
}


<div style="height: 250px; width: 250px; overflow: hidden; border:solid 1px black;">
<marquee direction="up" scrollamount="1" scrolldelay="1" height="246px" width="100%">
<div style="text-align: right; direction: rtl; font-family: Tahoma; font-size: 0.75em; margin:2px;">
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>
</marquee>
</div>

که خروجی اون میشه یه لیست بلند بالا از شیر آدمی زاد تا جون مرغ :لبخند: که از پایین به سمت بالا در حرکته

http://amir-ajorlo.ir/MyUpFile/barnamenevis/arz.jpg
http://barnamenevis.org/es.jpg/http://amir-ajorlo.ir/MyUpFile/barnamenevis

ParsaNM
سه شنبه 28 تیر 1390, 13:31 عصر
استاد عزيز ..
روش جالبي انتخاب کردي کلي لذت بردم ...
چند تا مشکل هست ...
اول اينکه وقتي کدت رو اجرا ميکنم صفحه خالي ميده .. هر دو مورد .. من اون رو ويرايش کردم و بجاي


@"&lt;div id='doc_div9'&gt;(\s)*(.*)(\s)*&lt;/div&gt;"
يک قسمت از source که در اون صفحه بود رو گذاشتم کار کرد البته نه به اون دقيقي که شما به عنوان مثال گذاشتي ...!
دوم اينکه تو اين خطي که من ويرايش کردم (تنها جايي مه نفهميدم دقيقا چيه) فقط انقدر ازش فهميدم که اين قسمت رو در text اصلي جستجو ميکنه ..
(\s)*(.*)(\s) و *&lt و &gt چي هستن ؟

Saman Hashemi
سه شنبه 28 تیر 1390, 14:37 عصر
خوب حالا فرض كنيد نه سرويس داريم نه RSS آيا راه حلي هست كه علاوه بر خبر بشه از ديگر Textهاي سايت مورد نظر استفاده كرد(لازم به ذكر كه همچين نرم افزاري رو ديدم)

Himalaya
سه شنبه 28 تیر 1390, 14:57 عصر
سلام

@"&lt;div id='doc_div9'&gt;(\s)*(.*)(\s)*&lt;/div&gt;"
=

@"<div id='doc_div9'>(\s)*(.*)(\s)*</div>"

من فیلتر رو روی سورس انکد شده نوشتم. شما میتونید رو همون سورس اصلی بنویسید.
عبارت اصلی تو سورس مثال 2 ، یه همچین قالبی داشت

<div id='doc_div9'> (مجموعه متنها و تگهای سازنده) </div>
که این عبارت شامل
تگ انتهایی + کاراکترهای فضای خالی + متنها و تگ هایی که اون قالب تصویر 2 رو میسازن + کاراکترهای فضای خالی + تگ ابتدایی
\s = space,\n,\t,\r و * هم یعنی به هر تعداد (0,n)
. هم یعنی هر کاراکتری به جز خط جدید
شما سورس رو بررسی کنید و نسبت به بخشی که میخواید انتخاب بشه pattern خودتون رو بنویسید.
واسه نوشتن pattern هم میتونید از نرم افزار Expresso Setup استفاده کنید


خوب حالا فرض كنيد نه سرويس داريم نه RSSخوب مثال پست 13 رو واسه زمانی گفتم که نه وب سرویس داریم و نه rss

آيا راه حلي هست كه علاوه بر خبر بشه از ديگر Textهاي سايت مورد نظر استفاده كردببینید، شما بخشی رو که از سورس یه سایت میخواید دریافت کنید، یا یه الگویی هستش که داره هی تکرار میشه (مثلا متنها و تصاویر و ... توی سطرهای جدول قرار گرفتن یا مثلا n تا تگ a (یا هر چی) با یه قالب مشخص و یکسان تو سورس سایت مورد نظر شما قرار دارن که میشه اون مثال اول تو پست 13
یا این که نه تمام اون چیزایی که شما میخواید تو یه تگ بیرونی مثل یه تگ div, span یا ... قرار گرفته که میشه مثال 2 از پست 13
به هر حال شما باید بتونید واسه جدا کردن سورس مورد نظرتون از یه سایت، سورس اون سایت رو بررسی و تحلیل کنید و به نظرم بهترین گزینه تو اینجا همون regular exprinsion هستش

Saman Hashemi
سه شنبه 28 تیر 1390, 15:39 عصر
سلام

@"&lt;div id='doc_div9'&gt;(\s)*(.*)(\s)*&lt;/div&gt;"
=

@"<div id='doc_div9'>(\s)*(.*)(\s)*</div>"

من فیلتر رو روی سورس انکد شده نوشتم. شما میتونید رو همون سورس اصلی بنویسید.
عبارت اصلی تو سورس ، یه همچین قالبی داشت

<div id='doc_div9'> (Tag a) </div>
\s = space,\n,\t,\r و * هم یعنی به هر تعداد (0,n)
. هم یعنی هر کاراکتری به جز خط جدید
شما سورس رو بررسی کنید و نسبت به بخشی که میخواید انتخاب بشه pattern خودتون رو بنویسید.
واسه نوشتن pattern هم میتونید از نرم افزار Expresso Setup استفاده کنید

خوب مثال پست 13 رو واسه زمانی گفتم که نه وب سرویس داریم و نه rss
بینید، شما بخشی رو که از سورس یه سایت میخواید دریافت کنید، یا یه الگویی هستش که داره هی تکرار میشه (مثلا متنها و تصاویر و ... توی سطرهای جدول قرار گرفتن یا مثلا n تا تگ a (یا هر چی) با یه قالب مشخص و یکسان تو سورس سایت مورد نظر شما قرار دارن که میشه اون مثال اول تو پست 13
یا این که نه تمام اون چیزایی که شما میخواید تو یه تگ بیرونی مثل یه تگ div, span یا ... قرار گرفته که میشه مثال 2 از پست 13
به هر حال شما باید بتونید واسه جدا کردن سورس مورد نظرتون از یه سایت، سورس اون سایت رو بررسی و تحلیل کنید و به نظرم بهترین گزینه تو اینجا همون regular exprinsion هستش


اگه اون نرم افزار نه از وب سرویس استفاده میکرده و نه از rss (که بعید میدونم)، به احتمال زیاد اون هم سورس رو تحلیل میکرده.

بابت پست ممنون من قبل از پست شما ارسال كردم عالي بود خيلي وقت بود دنبال اين كد بود