首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Reddit下载图片

从Reddit下载图片
EN

Code Review用户
提问于 2017-02-22 21:58:37
回答 1查看 1.2K关注 0票数 2
代码语言:javascript
复制
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下载图片。这怎么可能是潮水?谢谢。

EN

回答 1

Code Review用户

回答已采纳

发布于 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)

代码语言:javascript
复制
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扩展来简化这一点:

代码语言:javascript
复制
var fileName = imageURL.Split('/').Last();

这可能并不重要,但总是处理一次性物品是一个好习惯。这意味着WebClient需要特别的照顾。

你也想知道哪里出了问题,所以不要吞下这个例外。打印消息或记录整个异常。

在使用路径时,您应该使用Path.Combine方法来避免任何无效路径,如缺少\等的路径。

代码语言:javascript
复制
try
{
    using (var client = new WebClient())
    {
        client.DownloadFile(imageURL, Path.Combine(userDir, fileName));
    }
}
catch (Exception ex)
{
    Console.WriteLine($"[INFO] ERROR DOWNLOADING FILE: {ex}");
}
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/156055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档