Descargar imágenes de reddit -- # campo con beginner campo con http campo con network-file-transfer campo con reddit camp codereview Relacionados El problema

Download pictures from Reddit


2
vote

problema

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

El programa de manera efectiva solo descarga imágenes de un Subreddit de Reddit dado. ¿Cómo podría ser atado esto? Gracias.

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

The program effectively just downloads pictures from a given reddit subreddit. How could this be tided? Thanks.

              

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Hay pocas cosas que puedes hacer. Comience por encapsular estas líneas

  if (imageURL.Contains("gfycat.com")) {     imageURL = imageURL.Replace("gfycat.com", "zippy.gfycat.com") + ".mp4"; }  if (imageURL.Contains(".gifv")) {     imageURL = imageURL.Replace(".gifv", ".mp4"); }   

en su propio método. Llamémoslo FixImageUrl (esto es 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 index = splitURL.Length - 1; string fileName = splitURL[index];   

Luego, puede simplificar esto un poco usando el Last extensión:

  var fileName = imageURL.Split('/').Last();   

Probablemente no importa aquí, pero es un buen hábito para eliminar siempre los objetos que sean desechables. Esto significa que el WebClient requiere atención especial.

También quieres saber qué salió mal, así que no trague la excepción. Imprima el mensaje o registre la excepción completa.

Cuando trabaje con rutas, debe usar el método Path.Combine65544337 para evitar cualquier ruta no válida como las que faltan etc.

  try {     using (var client = new WebClient())     {         client.DownloadFile(imageURL, Path.Combine(userDir, fileName));     } } catch (Exception ex) {     Console.WriteLine($"[INFO] ERROR DOWNLOADING FILE: {ex}"); }   
 

There are few things you can do. Start by encapsulating these lines

if (imageURL.Contains("gfycat.com")) {     imageURL = imageURL.Replace("gfycat.com", "zippy.gfycat.com") + ".mp4"; }  if (imageURL.Contains(".gifv")) {     imageURL = imageURL.Replace(".gifv", ".mp4"); } 

in their own method. Let's call it FixImageUrl (this is 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 index = splitURL.Length - 1; string fileName = splitURL[index]; 

Then you can simplify this a little bit by using the Last extension:

var fileName = imageURL.Split('/').Last(); 

It probably doesn't matter here but it's a good habit to always dispose objects that are disposable. This means the WebClient requires special care.

You also want to know what went wrong so don't swallow the exception. Print either the message or log the entire exception.

When working with paths you should use the Path.Combine method to avoid any invalid paths like ones with missing \ etc.

try {     using (var client = new WebClient())     {         client.DownloadFile(imageURL, Path.Combine(userDir, fileName));     } } catch (Exception ex) {     Console.WriteLine($"[INFO] ERROR DOWNLOADING FILE: {ex}"); } 
 
 
 
 

Relacionados problema

6  Reemplazo de palabras específicas en texto con palabras de otra lista Python  ( Replacing specific words in text with words from another list python ) 
He escrito un script corto para usar la API de PRAW de Reddit para buscar un Subreddit para artículos y si ciertas palabras / palabras están en el título del ...

5  Recompra de remediones de Reddit más reciente  ( Newest reddit submissions grabber ) 
Mi programa hace exactamente lo que quiero que haga y funciona bien. Sin embargo, siento que es muy grueso. Me gustaría que mi código sea más eficiente. Por...

2  Extraer subredits superiores de una tabla HTML  ( Extracting top subreddits from an html table ) 
Estoy raspando una mesa y estoy tratando de anular las etiquetas TD anidadas por el árbol de Tbody, pero el código parece un poco verboso. ¿Hay una forma más ...

4  Twitter Bot para publicar el juego de Thrones Memes  ( Twitter bot to post game of thrones memes ) 
He creado un bot de Twitter, que puede analizar un subreddit y publicar contenido desde allí a Twitter. Estoy ejecutando este bot usando un cron-trabajo, que ...

5  Script para descargar imágenes de Reddit  ( Script to download images from reddit ) 
Escribí este script para descargar imágenes de Reddit. Me gustaría escuchar a otros sobre cómo puedo mejorar este script. import requests as _requests impo...

2  Scrape a Reddit Post Enviamiento para comentarios y guarda comentarios al archivo JSON (revisado)  ( Scrape a reddit post submission for comments and save comments to json file rev ) 
Este es el código revisado después de incorporar las sugerencias del usuario Roman Susi . Enlace a la publicación anterior Aquí. Ediciones notables: He ...

4  Scrape a Reddit Post Enviamiento para comentarios y guarda comentarios al archivo JSON  ( Scrape a reddit post submission for comments and save comments to json file ) 
Editar: Para una revisión de este código de acuerdo con los comentarios, consulte aquí: " AQUÍ ". en lo que respecta al código que involucra "Type": "C...

5  Reddit Hangman Bot Python3  ( Reddit hangman bot python3 ) 
de regreso con otro bot de reddit. Este ofrece juegos de Hangman a un número arbitrario de jugadores simultáneamente. Los usuarios interactúan con el BOT menc...

4  JavaScript Reddit bot  ( Javascript reddit bot ) 
Hace unos días he escrito JavaScript Bot para Reddit. Todo lo que hace está reemplazando no las URL de GFYCAT bien formateadas. ¡Me encantaría escuchar coment...

1  Aplicación Reddit Investigator-Like JS  ( Reddit investigator like js app ) 
Estoy construyendo una aplicación JS de una página similar a REDDITINANGIGATOR.COM, y mi objetivo es que se realice al 100% en JavaScript. Viniendo de un fond...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos