using System;
using System.Linq;
using RedditSharp;
using System.Net;
using RedditSharp.Things;
namespace reSharp
{
class Program
{
public static void Main()
{
string sub = "/r/";
string saveDir = @"SAVE_DIRECTORY";
Console.WriteLine("Subreddit:");
sub += Console.ReadLine();
Console.WriteLine("Amount:");
int amount = Convert.ToInt32(Console.ReadLine());
amount += 1;
Console.WriteLine("Time Period");
string timePer = Console.ReadLine();
Reddit reddit = new Reddit();
var subreddit = reddit.GetSubreddit(sub);
if (timePer == "all")
{
foreach (var post in subreddit.GetTop(FromTime.All).Take(amount))
{
if (post.IsStickied || post.IsSelfPost || Convert.ToString(post.Url).Contains("reddituploads")) continue;
string postURL = Convert.ToString(post.Url);
DownloadImages(postURL, saveDir);
}
}
else
{
if (timePer == "hot")
{
foreach (var post in subreddit.Hot.Take(amount))
{
if (post.IsStickied || post.IsSelfPost || Convert.ToString(post.Url).Contains("reddituploads")) continue;
string postURL = Convert.ToString(post.Url);
DownloadImages(postURL, saveDir);
}
}
}
}
public static void DownloadImages(string imageURL, string userDir)
{
if (imageURL.Contains("gfycat.com"))
{
imageURL = imageURL.Replace("gfycat.com", "zippy.gfycat.com") + ".mp4";
}
if (imageURL.Contains(".gifv"))
{
imageURL = imageURL.Replace(".gifv", ".mp4");
}
Console.WriteLine("Downloading {0}", imageURL);
string[] splitURL = imageURL.Split('/');
int index = splitURL.Length - 1;
string fileName = splitURL[index];
WebClient client = new WebClient();
try
{
client.DownloadFile(imageURL, userDir + fileName);
}
catch (Exception)
{
Console.WriteLine("[INFO] ERROR DOWNLOADING FILE");
}
}
}
}该程序实际上只是从给定的reddit subreddit下载图片。这怎么可能是潮水?谢谢。
发布于 2017-02-23 16:40:59
你几乎没什么能做的。从封装这些行开始
if (imageURL.Contains("gfycat.com")) { imageURL = imageURL.Replace("gfycat.com","zippy.gfycat.com") + ".mp4";} if (imageURL.Contains(".gifv")) { imageURL = imageURL.Replace(".gifv",".mp4");}
用他们自己的方法。让我们称之为FixImageUrl (这是C# 7)
public static string FixImageUrl(string imageUrl)
{
switch (imageUrl)
{
case string url when url.Contains("gfycat.com"):
return imageUrl.Replace("gfycat.com", "zippy.gfycat.com") + ".mp4";
case string url when url.Contains(".gifv"):
return imageUrl.Replace(".gifv", ".mp4");
default: return imageUrl;
}
}string[] splitURL = imageURL.Split('/');int索引= splitURL.Length - 1;string fileName = splitURL索引;
然后,您可以通过使用Last扩展来简化这一点:
var fileName = imageURL.Split('/').Last();这可能并不重要,但总是处理一次性物品是一个好习惯。这意味着WebClient需要特别的照顾。
你也想知道哪里出了问题,所以不要吞下这个例外。打印消息或记录整个异常。
在使用路径时,您应该使用Path.Combine方法来避免任何无效路径,如缺少\等的路径。
try
{
using (var client = new WebClient())
{
client.DownloadFile(imageURL, Path.Combine(userDir, fileName));
}
}
catch (Exception ex)
{
Console.WriteLine($"[INFO] ERROR DOWNLOADING FILE: {ex}");
}https://codereview.stackexchange.com/questions/156055
复制相似问题