2017-07-13 13 views
0

i複数のRSSフィードURLを読み込んでデータベースに格納するC#コンソールアプリケーションを作成しました。エンクロージャタグをC#Consoleで確認する方法複数のRSSフィードリーダー

今、私は記事の画像がタグエンクロージャであるワードプレスrssフィードジェネレータに問題があります。

記事の画像URLを取得してパースする方法は、ソースコードが存在する場合は、コードを使用しての説明タグ内のすべての画像URLを読み取ります。

はここで読むと、データベースに書き込む私のコードです:

using (var xmlReader = XmlReader.Create(izvorURLX)) 
{ 
    var rssFormatter = new Rss20FeedFormatter(); 
    rssFormatter.ReadFrom(xmlReader); 
    foreach (SyndicationItem syndicationItem in rssFormatter.Feed.Items) 
    { 
    Console.OutputEncoding = Encoding.UTF8; 
    string link = syndicationItem.Links[0].Uri.ToString(); 
    var statCat1 = Convert.ToString(("")); 
    foreach (var kategorija in syndicationItem.Categories.Take(1)) 
    { 
    statCat1 = (kategorija.Name); 
    } 
    var rr = syndicationItem.AttributeExtensions.Values; 
    var LastIZV1 = rssFormatter.Feed.LastUpdatedTime.DateTime; 
    var SiteTitle = rssFormatter.Feed.Title.Text; 
    var itemFD = Convert.ToString(syndicationItem.Summary.Text); 
    string clitemFD = Regex.Replace(itemFD, @"<[^>]*>", String.Empty, RegexOptions.IgnoreCase).Trim(); 
    var ItemItem = Convert.ToString(rssFormatter.Feed.Items); 
    var ff = rssFormatter.Feed.Items.ToString(); 
    var datumIZV0 = syndicationItem.PublishDate.DateTime; 
    var nula = Convert.ToDateTime("01.01.0001 00:00:00"); 
    var datumIZVX = Convert.ToDateTime(DateTime.Now); 
    if (datumIZV0 == nula) 
    { 
    datumIZVX = Convert.ToDateTime(DateTime.Now); 
    } 
    else 
    { 
    datumIZVX = Convert.ToDateTime(datumIZV0); 
    } 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(izvorURLX); 
    var imgSRC = Convert.ToString(""); 
    var reg1 = new Regex("src=(?:\"|\')?(?<imgSrc>[^>]*[^/].?:bmp|jpg|jpeg|gif|png))(?:\"|\')?"); 
    var match1 = reg1.Match(itemFD); 
    if (match1.Success) 
    { 
    Uri UrlImage = new Uri(match1.Groups["imgSrc"].Value, UriKind.Absolute); 
    imgSRC = UrlImage.ToString(); 
    } 
    var feedXML = Convert.ToString(izvorURLX); 
    int KatX = Convert.ToInt32(KatIzv); 
    var statTitle = Convert.ToString(syndicationItem.Title.Text); 
    var statLink = Convert.ToString(syndicationItem.Links[0].Uri); 
    SqlConnection conn = new SqlConnection("Server=localhost\\SQLEXPRESS;Database=RSSFeedAgregator;Integrated Security=true"); 
    conn.Open(); 
    var FeedID = Convert.ToInt32(0); 
    var LastinDB = Convert.ToDateTime("01.01.0001 00:00:00"); 
    string FeedInDB = Convert.ToString("a"); 
    using (SqlCommand cmdX2 = new SqlCommand("SELECT Feed_ID, Izvor, LastUpd, feed, Kategorija, iID, izvTitle, statCat FROM [dbo].[tbl_feeds]", conn)) 
    { 
    SqlDataReader readerX = cmdX2.ExecuteReader(); 
    while (readerX.Read()) 
    { 
    Console.OutputEncoding = Encoding.UTF8; 
    var feedTxt = Convert.ToString(readerX["feed"]); 
    FeedID = Convert.ToInt32(readerX["Feed_ID"]); 
    LastinDB = Convert.ToDateTime(readerX["LastUpd"]); 
    FeedInDB = Convert.ToString(readerX["feed"]); 
    } 
    readerX.Close(); 
    } 
    bool inList = DB.Contains(clitemFD); 
    var statIMG = Convert.ToString(""); 
    if (inList == false) 
    { 
    Console.WriteLine("false: Ne postoi"); 
    using (SqlCommand cmd1 = new SqlCommand("INSERT INTO tbl_feeds VALUES (" + "@Izvor, @LastUpd, @feed, @Kategorija, @iID, @izvTitle, @statCat, @statTitle, @statLink, @statImage)", conn)) 
    { 
    cmd1.Parameters.AddWithValue("@Izvor", feedXML); 
    cmd1.Parameters.AddWithValue("@LastUpd", datumIZVX); 
    cmd1.Parameters.AddWithValue("@feed", clitemFD); 
    cmd1.Parameters.AddWithValue("@Kategorija", KatX); 
    cmd1.Parameters.AddWithValue("@iID", IzvID); 
    cmd1.Parameters.AddWithValue("@izvTitle", SiteTitle); 
    cmd1.Parameters.AddWithValue("@statCat", statCat1); 
    cmd1.Parameters.AddWithValue("@statTitle", statTitle); 
    cmd1.Parameters.AddWithValue("@statLink", statLink); 
    cmd1.Parameters.AddWithValue("@statImage", imgSRC); 
    int rows = cmd1.ExecuteNonQuery(); 
    Console.WriteLine("Uspesno dodadeno nov zapis !"); 
    } 
    conn.Close(); 
    } 
    else 
    { 
    Console.WriteLine("true: Postoi"); 
    } 
    } 
    } 

申し訳ありませんが、私のロングコードのために、私の事をよりよく理解する、と私は誰も私を助けることができると思います。

を更新し

はまた、私は、このコードは、エンクロージャURLを読んで、ちょうど読むことを繰り返して、ソースは10件の記事を持っている場合、このコードは10回を読んで、すべての10のimgのURLを、データベースにだけ保存し、このコードを見つけました最後の一つ。

XmlNodeList items = doc.SelectNodes("//item") ; 

for (int i = 0; i < items.Count; i++) 
{ 
var encImg = (items[i].SelectSingleNode("enclosure").Attributes["url"].Value); 
} 

誰でもこのコードを変更してプロパティを変更できますか?

+0

はそれをしないでください。 HTMLパーサを使用する必要があります。 – SLaks

+0

また、あなたの 'Convert.ToString'呼び出しは意味を持ちません。 – SLaks

+0

あなたの奇妙なループの代わりに 'First()'を使用してください。 – SLaks

答えて

0

私はあなたに正直で、私はあなたのコードをよく理解できませんので、あなたのコードを表/整理することをお勧めします。

そのために、Ctrl + K + Ctrl + Dを使用できます。

さらにショートカットを確認することができますhere


したらこれを言う、あなたは簡単にこのコード行を使用してエンクロージャのURLを見つけることができます。

string link = ""; 
foreach (SyndicationItem syndicationItem in rssFormatter.Feed.Items) 
{ 
    Console.OutputEncoding = Encoding.UTF8; 
    // You have to check if `syndicationItem.Links` has more than 1 element. 
    if (syndicationItem.Links.Count > 0) 
    { 
     // this is the line that shows you the url of the "enclosure" tag: 
     link = syndicationItem.Links[1].Uri.ToString(); 
    } 

    // Prints the Image's src. 
    Console.WriteLine("Image src: " + link); 
} 

以前のコードでは、私を出力します。

Image src: http://a1on.mk/wp-content/uploads/2017/07/turcija-ucenici.jpg 
Image src: http://a1on.mk/wp-content/uploads/2017/07/vlada-18juli.jpg 
Image src: http://a1on.mk/wp-content/uploads/2017/07/tomas-greminger.jpg 
Image src: http://a1on.mk/wp-content/uploads/2014/08/toplo.jpg 
Image src: http://a1on.mk/wp-content/uploads/2017/06/grncarov.gif 
Image src: http://a1on.mk/wp-content/uploads/2015/04/uprava-finansiska-policija.gif 
Image src: http://a1on.mk/wp-content/uploads/2017/05/pritvor-turska.jpg 
Image src: http://a1on.mk/wp-content/uploads/2017/07/kosarkari-do20.jpg 
Image src: http://a1on.mk/wp-content/uploads/2017/07/vardar-fk-nat.jpg 
Image src: http://a1on.mk/wp-content/uploads/2017/07/burgas.jpg 
関連する問題