PDA

View Full Version : مبتدی: خواندن و ارسال اطلاعات به یک سایت



m.h.bayan
چهارشنبه 27 خرداد 1394, 18:22 عصر
سلام به همه دوستان
اگه می شه یه راهنمایی بفرمایید که چگونه می تونم اطلاعات از یک سایت دریافت کنم توی یه اپلیکیشن تحت ویندوز برای مثال یک سایت خبری در نظر بگیرید می خوام اخبار و نظرات اون اخبار دریافت کنم و بعد از این کار با ایجاد یه تکست باکس در برنامه این امکان به کاربر بدیم که نظر خودش برای اون خبر از طریق برنامه تحت ویندوز ثبت کند بدون استفاده از وب سرویس ها می خوام این کار انجام بدم چون همه ی سایت ها وب سرویس ندارن .

ممنون از همگی

nunegandom
پنج شنبه 28 خرداد 1394, 00:47 صبح
سلام گرفتن اطلاعات اینجوریه
اینو ادد رفرنس کن:
htmlagilitypack.codeplex.com


using System;using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;
using System.Xml.Linq;
using System.Text.RegularExpressions;
using HtmlAgilityPack;


/// <summary>
/// Summary description for GetAliCategories
/// </summary>
public class GetAliCategories
{
List<MainCat> tmp = new List<MainCat>();
HtmlDocument htdoc = new HtmlDocument();
public GetAliCategories(){
string url = @"http://www.****.com/all-wholesale-products.html";
WebClient wc = new WebClient();
string site = wc.DownloadString(url);
htdoc.LoadHtml(site);
}


public List<MainCat> GetAllMainCat()
{
var findclasses = htdoc.DocumentNode.Descendants("a").Where(d =>
d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("main-category"));

foreach (var item in findclasses)
{
tmp.Add(new MainCat { Line = item.Line, Text = item.InnerText });
}
return tmp;

}
public class MainCat
{
public string Text { get; set; }
public int Line { get; set; }
}

pbm_soy
پنج شنبه 28 خرداد 1394, 01:18 صبح
پیشنهاد من برای نمایش اخبار استفاده از RSS Feed سایت خبری است اینطوری دیگر نیازی به Parse صفحات Html سایت ندارید (که کار پردردسری است) و میتوانید مستقیما از فایل XML که خروجی Rss است استفاده کنید

مورد بعدی برای ثبت نظرات بدون وب سرویس است برای اینکار هم باید ببینید سایت چه نوع فرم ثبت نطراتی را طراحی کرده و دراختیار کاربران گذاشته؟ آیا کد کپچا دارد یا نه؟
در کل برای اینکار یک درخواست Http به اون صفحه ای از سایت که کار ثبت نظر را انجام میدهد باید بفرستید (به همراه داده های مورد نیاز آن صفحه که یکی از آنها نظر کاربر است) برای ارسال چنین درخواستی، بطور کامل و دقیق آن صفحه ثبت نظرات را باید بررسی کنید تا بتوانید یک درخواست صحیح و منطبق با آن بفرستید

partovinia
دوشنبه 13 مهر 1394, 05:45 صبح
سلام .ممنون .ولی من اصلا متوجه این کد نمی شم .میشه بهم توضیح بدین...
maincatچیه؟


List<MainCat> tmp = new List<MainCat>();



public List<MainCat> GetAllMainCat() {
var findclasses = htdoc.DocumentNode.Descendants("a").Where(d =>
d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("main-category"));

foreach (var item in findclasses)
{
tmp.Add(new MainCat { Line = item.Line, Text = item.InnerText });
}
return tmp;

}



لطف کنید قطعه کد بالا رو توضیح بدین ...
متشکرم

partovinia
دوشنبه 13 مهر 1394, 05:55 صبح
با سلام دوباره من این کد رو نوشتم که کدهای سایت خبری رو می خونه و تو یه فایل برمی گردونه !
نمی دونم از راه درستی می رم یا نه ! می خوام تیترهاش رو هم جدا کنم ...باید چی کار کنم ؟
ممنونم

static void Main(string[] args)
{
string url = "https://www.tabnak.ir/";

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

if (myResponse.StatusCode == HttpStatusCode.OK)
{
Stream receiveStream = myResponse.GetResponseStream();
StreamReader readStream = null;
if (myResponse.CharacterSet == null)
{
readStream = new StreamReader(receiveStream);
}
else
{
readStream = new StreamReader(receiveStream, Encoding.GetEncoding(myResponse.CharacterSet));
}

string data = readStream.ReadToEnd();

myResponse.Close();
readStream.Close();


//FileInfo myFile = new FileInfo(@"E:\oop.txt");
//myFile.Create();
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
sw.WriteLine(data);
sw.Flush();
ms.WriteTo(File.OpenWrite(@"E:\oop.txt"));
ms.Close();
sw.Close();
Console.Write("{0}", data);
}

nunegandom
دوشنبه 13 مهر 1394, 21:46 عصر
سلام
public class MainCat
{
public string Text { get; set; }
public int Line { get; set; }
}

یه کلاس ساختم به صورت بالا که دارای دو خصوصیت Text و Line هست این رو به List میدم :)
List یک ساختار قابل شمارش و با امکانات بالا هست که میتونه کلاس هایی رو بپذیره از مثل string یا int یا کلاس هایی که خودمون ساختیم یه چیزی تو مایه هایه آرایه هستش

مورد دوم:
htdoc شامل کدهای html هست که دانلودشون کردیم
میگیم که در گره سند (document nod ) ، فرزند a یی رو پیدا کن که attribute اش شامل class و مقدار اون class شامل main-category باشه
حالا همشون رو بریز توی findclasses و یه لیست tmp هم که اول کار داریم که MainCat میگیره
خوب حالا توی حلقه میاد هر دفعه یه کلاس MainCat جدید میسازه و مقدار دهیش میکنه سپس به tmp مون اضافه میکنه
بعد tmp رو برمیگردونه
موفق باشید

nunegandom
دوشنبه 13 مهر 1394, 21:56 عصر
این قسمت رو ببین شما
var findclasses = htdoc.DocumentNode.Descendants("a").Where(d =>
d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("main-category"));

فکر کنم کافی باشه main-category رو به title3 تغییر بدین
سورسشو نگاه کن شما ببین کدوم رو میخوای
تیتر سمت چپ title5 هست
تیتری که عکسی داره title5pic
موفق باشید