2016-06-26 3 views
0

Es ist Archiv. Startdatum und -uhrzeit sind: 24/6/2016 und 13:10 Uhr. Ich möchte in Schleife bis zum Datum 24/6/2016 zu 25/6/2016Wie kann ich die Bilder von der Website nach Datum und Stunden herunterladen, bis das Datum geändert wird?

herunterladen Die Bilder sind in einer 10-minütigen Frequenz.

Das Format isi n den unten stehenden Link:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using System.Net; 

namespace Search_Text_In_Files 
{ 
    class DownloadRadarImages 
    { 
     private void DownloadImages() 
     { 
      string imageslinks = "http://www.meteoswiss.admin.ch/product/output/radar-processing/VRAG05.CCSK_20160624_1310.png"; 

      using (WebClient client = new WebClient()) 
      { 
       client.DownloadFileAsync(new Uri(imageslinks), @"c:\temp\image35.png"); 
      } 
     } 
    } 
} 

Vielleicht, dass so etwas in der Idee der Code nicht gut ist, aber so etwas wie dies vielleicht

private void DownloadImages() 
     { 
      int countTime = 0; 

      while (true) 
      { 
       string imageslinks = "http://www.meteoswiss.admin.ch/product/output/radar-processing/VRAG05.CCSK_20160624_" + countTime + ".png"; 
       using (WebClient client = new WebClient()) 
       { 
        client.DownloadFileAsync(new Uri(imageslinks), @"c:\temp\" + countTime + ".png"); 
       } 
      } 
     } 
+0

Haben Sie die Bilderliste bei sich? Ansonsten glaube ich nicht, dass man den Namen der Bilder mit Datum und Uhrzeit richtig erraten kann. Es kann viel zu viele Kombinationen geben. –

+1

Bevor Sie überhaupt darüber nachdenken, wie Sie aufhören, müssen Sie überdenken, wie Sie starten, Sie können nicht einfach dauerhaft von einer Website herunterladen, so dass es im besten Fall Ihre Verbindung zu töten, im schlimmsten Fall ihre töten und in beide Richtungen wahrscheinlich bekommen Sie IP ist davon ausgeschlossen. Verwenden Sie einen Timer und Download, wenn Sie müssen (zum Beispiel alle 2 Minuten, aber nicht alle 10 Millisekunden wie dies Willen) –

+1

@AnkitVijay Die Bilder sind in einer 10-minütigen Frequenz (das OP sollte dies auf die Frage hinzugefügt haben) –

Antwort

1

würde ich Microsofts Reactive Rahmen für diesen Einsatz. Nur NuGet „Rx-Main“, bevor Sie diesen Code versuchen:

string imageslinks = "http://www.meteoswiss.admin.ch/product/output/radar-processing/VRAG05.CCSK_20160624_1310.png"; 
Func<long, string> createFileName = n => String.Format(@"C:\temp\image-{0}-{1}.png", DateTime.Now.ToString("yyyyMMddHHmmss"), n); 

var query = 
    Observable 
     .Timer(TimeSpan.FromDays(0.0), TimeSpan.FromMinutes(10.0)) 
     .TakeUntil(DateTimeOffset.Now.Date.AddDays(1.0)) 
     .SelectMany(n => 
      Observable 
       .Using(
        () => new WebClient(), 
        wc => Observable.FromAsync(() => wc.DownloadFileTaskAsync(new Uri(imageslinks), createFileName(n))))); 

var subscription = 
    query 
     .Subscribe(u => Console.Write(".")); 

ich getestet habe dies und es funktioniert gut.

Wenn Sie das Abonnement vorzeitig beenden müssen, rufen Sie einfach subscription.Dispose() an.

+0

Das funktioniert gut für das erste Bild und wenn ich es mit dem Timer verwenden möchte, um mehr Bilder zu bekommen? –

+1

@ ננננחםנחם - Dies hat bereits einen Timer - der 'Observable.Timer' Teil ist der Timer. Es ist für ein 10-Minuten-Intervall eingestellt - haben Sie lange genug gewartet, bis das zweite Bild heruntergeladen wurde? Ich habe es mit 'FromSeconds' getestet, um zu sehen, dass es richtig funktioniert. – Enigmativity

0

zu this link entnehmen Sie bitte dem erklären, wie eine Datei nach lokal herunterladen.

Sie müssten auch die Liste der Bild-URL, die Sie herunterladen müssen. Dafür können Sie eine Hilfsmethode wie unten verwenden: (Achtung: Nicht geprüft)

public List<string> GetImages(string baseAddress, DateTime startDate, DateTime endDate) { 

     var imageList = new List<string>(); 
     while (startDate < endDate) { 
      var dateString = startDate.ToString("yyyymmdd"); 
      var timeString = startDate.ToString("HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo); 

      imageList.Add($"{baseAddress}_{dateString}_{timeString}.png"); //C# 6.0 feature. 
      startDate = startDate.AddMinutes(10); 

     } 

     return imageList; 

} 
Verwandte Themen