Verificación de Reddit desde OS X Terminal
() translation by (you can also view the original English article)
Screencast
Reddit es una red social que, en los últimos años, ha explotado en popularidad. Su modelo de contenido impulsado por el usuario lo convierte en un excelente lugar para encontrar noticias, humor, cosas que ni sabías que querías saber y algunas cosas que simplemente no puedes dejar de ver. ¡Es genial!
Gran parte de la popularidad de Reddit proviene de su noción de sub-reddits. Que no son más que publicaciones agrupadas por una persona, lugar, artículo o ideal. Como ejemplo, uno de los sub-reddits más populares hasta la fecha es r / aww. Un sub-reddit lleno de imágenes de animales adorables.
Si tan solo hubiera una forma de navegar por Reddit en el trabajo sin llamar demasiado la atención (o tu pantalla).
En este tutorial, te enseñaré cómo navegar por Reddit desde Terminal. Aprenderás:
- Sintaxis básica del código Ruby
- El feed JSON de Reddit y cómo te ayudará a ejecutar el script
- Cómo analizar el feed JSON y mostrarlo
- Cómo volver un alias al script desde un comando simple
Conceptos básicos de Ruby
Lo primero que necesitas saber es cómo enviar mensajes a la terminal y cómo obtener la entrada del usuario desde la terminal. Estos métodos son gets
y puts
, respectivamente.
Siempre que desees mostrar algo en la pantalla, utiliza el método de puts
y ajusta el texto entre comillas. Siempre que necesites obtener información del usuario, utiliza el método de gets
.
Ahora necesitas una forma de almacenar todo lo que ingrese el usuario. Para hacer esto, usarás variables. Para declarar una variable, asígnale un nombre, luego iníciala seguida de un = y finalmente agrega un valor para almacenar en ella.
Entonces, las primeras líneas del programa deberían leerse así:
1 |
puts "What subreddit? Example: /r/aww put aww" |
2 |
sub = gets.chomp!.downcase |
3 |
puts "Getting you the top posts for /r/#{sub}." |
En la primera línea, estás saludando al usuario y le estás pidiendo que elija un sub-reddit. En la segunda línea, estás creando la variable sub
y dándole el valor de lo que sea que escriba el usuario.
¡El chomp
! y los métodos downcase
simplemente eliminan los espacios en blanco finales y hacen que toda la entrada sea mínima, lo que agrega un poco de consistencia. Ahora puedes incluir esa variable en cualquier lugar de la salida envolviéndola en # {}
. A esto se le llama interpolación de cadenas.
Feed JSON de Reddit
JSON son las siglas de Javascript Object Notation. En términos simples, es solo una excelente manera de obtener todos los datos de un sitio web en particular (que tiene una API JSON en su lugar) sin todo el marcado o estilo adicional.
En la terminal, no quieres ningún estilo o marca; solo los datos. Entonces JSON encaja bien aquí.
La API JSON de Reddit es muy fácil de usar. Agrega un .json
a cualquier URL de Reddit que normalmente ingresarías en el navegador web. Como ejemplo: para obtener el feed JSON / r / aww, debe ir a http://www.reddit.com/r/aww.json.



Eso es una gran cantidad de información. Afortunadamente, Ruby ya tiene una forma sencilla de analizar JSON y de obtener solo la información que necesita.
Analizando el feed JSON
Para obtener el feed y analizarlo, deberás instalar algunas bibliotecas de Ruby existentes. En la terminal, ejecuta los siguientes comandos:
1 |
gem install faradaygem install json |
Luego agrega las siguientes líneas en la parte superior del archivo:
1 |
require 'faraday' |
2 |
require 'json' |
Faraday te permitirá usar Ruby para realizar llamadas a la URL en Internet y JSON te ayudará a analizar la información que obtengas. Una vez que tengas estas nuevas bibliotecas disponibles, puedes usar el siguiente código para:
- Tener la entrada del usuario
- Generar una URL
- Llamar a la URL y obtener retroalimentación JSON
1 |
#Bring in additional libs
|
2 |
require 'faraday' |
3 |
require 'json' |
4 |
|
5 |
#Greet the user
|
6 |
puts "What subreddit? Example: For r/aww, type aww" |
7 |
sub = gets.chomp!.to_s.downcase |
8 |
|
9 |
#Output response
|
10 |
puts "Getting you the top posts for /r/#{sub}." |
11 |
|
12 |
#Get JSON feed of selected Reddit
|
13 |
response = Faraday.get "http://www.reddit.com/r/#{sub}.json" |
14 |
json_response = JSON.parse response.body |
15 |
posts = json_response['data']['children'] |
Para iterar (o recorrer) cada una de las publicaciones, recupera y muestra cada una en un formato legible. Haz esto usando un for-loop. Aquí está el código que realiza esa tarea:
1 |
i = 1 |
2 |
posts.take(10).each do |p| |
3 |
post = p['data'] |
4 |
puts "#{i}. " + post['title'] |
5 |
puts "Ups: #{post['ups']} | Downs: #{post['downs']} | Score: #{post['score']}" |
6 |
puts '' |
7 |
i += 1 |
8 |
end
|
Si quieres tener la opción de abrir una de las publicaciones en el navegador predeterminado de Mac, ejecuta gem install launchy
.
Luego agrégalo a la lista de otras bibliotecas que estás incluyendo al añadir require 'launchy'
en la parte superior del archivo.
Finalmente agrega este fragmento de código debajo del for-loop:
1 |
#Present option to launch any post in default browser
|
2 |
puts "Would you like to open any of these? Choose the number to open, or reply 'No'" |
3 |
open_url = gets.chomp!.to_s |
4 |
if open_url.downcase == "no" || open_url.to_i > 10 |
5 |
puts "ok" |
6 |
else
|
7 |
Launchy.open posts[open_url.to_i - 1]['data']['url'] |
8 |
end
|
El script completo debería verse así:
1 |
#Bring in additional libs
|
2 |
require 'faraday' |
3 |
require 'json' |
4 |
require 'launchy' |
5 |
|
6 |
#Greet the user
|
7 |
puts "Hi! What subreddit? Example: For r/aww, simply type aww" |
8 |
sub = gets.chomp!.to_s.downcase |
9 |
|
10 |
#Output response
|
11 |
puts "Getting you the top posts for /r/#{sub}." |
12 |
|
13 |
#Get JSON feed of selected Reddit
|
14 |
response = Faraday.get "http://www.reddit.com/r/#{sub}.json" |
15 |
json_response = JSON.parse response.body |
16 |
posts = json_response['data']['children'] |
17 |
|
18 |
#Iterate over the feed and outputting the posts
|
19 |
i = 1 |
20 |
posts.take(10).each do |p| |
21 |
post = p['data'] |
22 |
puts "#{i}. " + post['title'] |
23 |
puts "Ups: #{post['ups']} | Downs: #{post['downs']} | Score: #{post['score']}" |
24 |
puts '' |
25 |
i += 1 |
26 |
end
|
27 |
|
28 |
#Present option to launch any post in default browser
|
29 |
puts "Would you like to open any of these? Choose the number to open, or reply 'No'" |
30 |
open_url = gets.chomp!.to_s |
31 |
if open_url.downcase == "no" || open_url.to_i > 10 |
32 |
puts "ok" |
33 |
else
|
34 |
Launchy.open posts[open_url.to_i - 1]['data']['url'] |
35 |
end
|
Guarda el archivo como check_reddit.rb en la carpeta Documentos. Para ejecutar el script, abre Terminal y ejecuta ruby ~ / Documents / check_reddit.rb
.
Crear un alias para el script
Tener la capacidad de ejecutar ruby ~ / Documents / check_reddit.rb
está muy bien, pero sería mejor si pudieras escribir check-reddit
en la terminal y hacer que el script se ejecute mágicamente.
Para lograr esto, puedes poner un alias de la palabra check-reddit
con el comando ruby ~ / Documents / check_reddit.rb
. En la terminal, ejecuta nano ~ / .bash_profile
. Esto cargará el archivo bash_profile
en un editor de texto.
Arrastra hacia abajo el cursor para mover cualquier texto existente y agregar el alias check-reddit = 'ruby ~ / Documents / check_reddit.rb'
en una nueva línea.
Para salir y guardar el archivo da clic en Control-X. Se te pedirá que guardar los cambios. Presiona la tecla Y luego Volver para confirmar. Ejecuta source ~ / .bash_profile
para volver a cargar bash_profile
en la Terminal.
Conclusión
A partir de ahora podrás ejecutar check-reddit
en la terminal para navegar con estilo.



La capacidad de ver las 10 publicaciones principales en cualquier sub Reddit a través de la terminal es increíble. Te permite navegar rápidamente por Reddit, sin llamar la atención e incluso hace que parezca que estás trabajando.
En el camino también aprendiste algunas habilidades básicas de Ruby y JSON. ¡Buen trabajo!