2017-07-13 2 views
0

Ich habe erstellt C# Console-Anwendung, die mehrere RSS-Feed-URLs lesen, dann Werte nehmen und in die Datenbank.So prüfen Sie mit C# Console mehrere rss Feed-Leser

Jetzt habe ich Probleme mit Wordpress RSS Feed Generator wo Artikel Bild ist mit Tag Gehäuse.

Wie Artikel Artikel URL zu nehmen und zu analysieren, wenn in der Quelle vorhanden Gehäuse, mit meinem Code Ich lese alle Bild URLs, die in Beschreibung Tags ist.

Hier ist mein Code, der in der Datenbank lesen und schreiben:

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"); 
    } 
    } 
    } 

Sorry für meinen langen Code, aber ich etwas besser zu verstehen, und ich hoffe, dass mir jemand helfen kann.

AKTUALISIERT

Auch ich diesen Code gefunden, lesen Sie diesen Code Enclosure URL, sondern nur wiederholen, um zu lesen und wenn Quelle 10 Artikel haben, dieser Code 10-mal alle 10 img URL zu lesen, und in der Datenbank speichern nur Letzter.

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

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

Jeder kann diesen Code ändern, um Eigenschaft zu arbeiten?

+0

Tu das nicht. Sie müssen einen HTML-Parser verwenden. – SLaks

+0

Auch Ihre 'Convert.ToString' Aufrufe machen überhaupt keinen Sinn. – SLaks

+0

Verwenden Sie 'First()' anstelle Ihrer seltsamen Schleife. – SLaks

Antwort

0

Ich bin ehrlich zu Ihnen, ich kann Ihren Code nicht sehr gut verstehen, also schlage ich vor, dass Sie Ihren Code tabellieren/bestellen.

Dafür können Sie Strg + K + Strg + D verwenden.

Sie können weitere Verknüpfungen überprüfen here.


Sobald dies sagen, können Sie einfach das Gehäuse url mit dieser Codezeile finden:

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); 
} 

Der vorherige Code gibt mir:

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