2012-01-07 6 views
0

私はAsp.net MVCで作業しており、私には分かりません。他のURLをコードで訪問し、そこからいくつかのデータを抽出する

私が望むのは、ユーザーが自分のサイトから特定のURLをリクエストしたときに、データベース内のプリセットURLにアクセスしてデータを抽出し、レンダリングする前にViewにバインドする必要があるということです。あなたはmysite.com/Search/Indexを訪問すれば

は例えば、その後、私のアクションメソッドインデックスに、私は、anothersite.com/someparticular/urlを訪問して<div>に値を抽出したいですid = "searclbl"、それを私のビューにバインドし、ページをレンダリングします。

私が働いているサイトがWebサービスやRSSを提供していないため、HTMLを読む必要があります。

この件に関するお手伝いやご指摘をいただければ幸いです。

答えて

2

HtmlAgilityPack(これはプロジェクト内にNuGetパッケージを介してインストールできます)を使用してこの問題を解決できる可能性があります。例えば

: のはSearchControllerのあなたのインデックス表示が強く、次のViewModelに型付けされたと仮定しましょう:

public ActionResult Index() 
{ 
    var model = new SearchViewModel(); 
    model.DivElement = GetDivFromWebSite(); 

    return View(model); 
} 

GetDivFromWebSite():

public class SearchViewModel 
{ 
    public string DivElement { get; set; } 
    //other properties... 
} 

これは、インデックスのActionResult()でありますメソッドは、HtmlAgilityPackを使用して別のWebサイトから情報を取得し、そのように定義されています。

private string GetDivFromWebSite() 
{ 
    var baseUrl = new Uri("http://www.anotherdomaine.com"); 
    HtmlAgilityPack.HtmlDocument document = new HtmlDocument(); 
    using (WebClient client = new WebClient()) 
    { 
     document.Load(client.OpenRead(baseUrl)); 
    } 

    if (document == null) return "nothing found!"; 
    var div = document.DocumentNode.SelectNodes("//div[@id='missing-category']").FirstOrDefault(); 

    return div.InnerHtml; 
} 

このかもしれないトリックをしてください!

+0

すごくお礼ありがとうございます –

+0

この部分にいくつかの光を投げることができれば素晴らしいと思います(「// div [@ id = 'missing-category']」) '...私はそれを完全に理解していません....ここで何が行われたのか少しだけ簡単で、他のdivやスパン、その他のタグなどをトラバースするにはどうすればいいですか? –

+0

まあ...私は多くの時間を費やしていないHtmlAgilityPackで遊んで、私のスキルは幾分限られています。たぶん文書(または例)が良いかもしれません。または、ここにリンクがあります:http://stackoverflow.com/questions/846994/how-to-use-html-agility-pack – Vlince

関連する問題