Vérifiez Reddit depuis un terminal OS X

Screencast

Reddit est un réseau social dont la popularité a explosé ces dernières années. Son modèle de contenu axé sur l'utilisateur est un excellent endroit pour trouver des nouvelles, de l'humour, des choses que vous ne saviez pas que vous vouliez savoir et des choses que vous ne pouvez jamais perdre de vue. C'est bien!

Une grande partie de la popularité de Reddit provient de sa notion de sous-redits. Ce ne sont rien de plus que des messages rassemblés par une personne, un lieu, un objet ou un idéal commun. À titre d'exemple, l'un des sous-reddits les plus populaires à ce jour est r / aww. Un sous-reddit rempli avec rien que des images d'animaux adorables.

Si seulement il y avait un moyen de surfer sur Reddit au travail sans trop attirer l'attention sur soi (ou sur l'écran).

Dans ce tutoriel, je vais vous montrer comment surfer sur Reddit à partir de Terminal. Tu vas apprendre:

  • Syntaxe de base du code Ruby
  • Le flux JSON de Reddit et comment il aidera le script à s'exécuter
  • Comment analyser le flux JSON et l'afficher
  • Comment aliaser le script en une simple commande

Ruby Basics

La première chose à savoir est de savoir comment envoyer des messages au terminal et comment obtenir la saisie de l'utilisateur depuis le terminal. Ces méthodes sont obtient et met, respectivement. 

Chaque fois que vous souhaitez afficher quoi que ce soit à l’écran, utilisez la commande met méthode et envelopper le texte entre guillemets. Chaque fois que vous avez besoin d’obtenir des informations de l’utilisateur, utilisez le obtient méthode. 

Vous avez maintenant besoin d'un moyen de stocker tout ce que l'utilisateur entre. Pour ce faire, vous utiliserez des variables. Pour déclarer une variable, donnez-lui un nom, puis lancez-la en la suivant avec un = et enfin ajouter une valeur à stocker dans ce.

Ainsi, les premières lignes du programme devraient se lire comme ceci:

met "Qu'est-ce que subreddit? Exemple: / r / aww put aww" sub = gets.chomp! .downcase met "Vous obtenez les meilleurs messages pour / r / # sub."

Dans la première ligne, vous saluez l’utilisateur et lui demandez de choisir un sous-reddit. Dans la deuxième ligne, vous créez le variable sous et en lui donnant la valeur de tout ce que l'utilisateur tape. 

le chomp! et downcase les méthodes suppriment simplement les espaces en fin de chaîne et rendent toutes les entrées minuscules, ce qui ajoute un peu de cohérence. Vous pouvez maintenant inclure cette variable n'importe où dans la sortie en l'enveloppant dans # . Ceci est appelé interpolation de chaîne.

Flux JSON de Reddit

JSON signifie Notation d'objets Javascript. En termes simples, il s'agit simplement d'un excellent moyen de récupérer toutes les données d'un site Web particulier (disposant d'une API JSON) sans les balises ou les styles supplémentaires.. 

Dans le terminal, vous ne voulez pas de style ou de balisage; juste les données. Donc, JSON convient bien ici.

L'API JSON de Reddit est extrêmement simple à utiliser. Ajouter un .JSON à n'importe quelle URL Reddit que vous introduirez normalement dans le navigateur Web. Par exemple: pour obtenir le flux JSON / r / aww, accédez à http://www.reddit.com/r/aww.json..

Le flux Reddit JSON de / r / aww

Cela fait beaucoup de données. Heureusement, Ruby dispose déjà d’un moyen simple d’analyser JSON et de ne vous fournir que les informations dont vous avez besoin..

Analyser le flux JSON

Pour obtenir le flux et l’analyser, vous devez installer certaines bibliothèques Ruby existantes. Dans le terminal, exécutez les commandes suivantes:

gem installer faraday
gem installer json

Ajoutez ensuite les lignes suivantes tout en haut du fichier:

nécessite 'faraday' nécessite 'json'

Faraday vous permettra d’utiliser Ruby pour appeler des URL sur Internet et JSON vous aidera à analyser les informations que vous avez récupérées. Une fois que vous avez ces nouvelles bibliothèques disponibles, vous pouvez utiliser le code suivant pour:

  1. Saisir la saisie de l'utilisateur
  2. Générer une URL
  3. Appelez l'URL et obtenez le feed-back JSON
#Importer dans les bibliothèques supplémentaires requièrent 'faraday' oblige 'json' #Greet l'utilisateur insère "Quel subreddit? Exemple: pour r / aww, tapez aww" sub = gets.chomp! .To_s.downcase #Output response met "Obtention du messages les plus populaires pour / r / # sub. " #Obtenir le flux JSON de la réponse Reddit sélectionnée = Faraday.get "http://www.reddit.com/r/#subBuch.json" json_response = JSON.parse response.body posts = json_response ['data'] [' les enfants]

Pour parcourir (ou faire une boucle) sur chacun des messages, vous revenez en arrière et affichez chacun dans un format lisible. Faites cela en utilisant une boucle for. Voici le code qui accomplit cette tâche:

i = 1 posts.take (10) .each do | p | post = p ['data'] met "# i." + post ['title'] met "Ups: # post ['ups'] | Downs: # post ['downs'] | Score : # post ['score'] "met" i + = 1 fin

Si vous souhaitez vous donner la possibilité d'ouvrir l'une des publications dans le navigateur par défaut du Mac, exécutez gem installer launchy

Ajoutez-le ensuite à la liste des autres bibliothèques que vous incluez en ajoutant nécessite 'lancement' vers le haut du fichier. 

Enfin, ajoutez cette partie de code sous la boucle for:

"La présente option permet de lancer n'importe quel message dans le navigateur par défaut" Voulez-vous en ouvrir? Choisissez le numéro à ouvrir ou répondez "Non" "open_url = gets.chomp! .To_s si open_url.downcase ==" non " || open_url.to_i> 10 met "ok" sinon Launchy.open posts [open_url.to_i - 1] ['data'] ['url'] end

Le script complet devrait ressembler à ceci:

#Amener dans les bibliothèques supplémentaires requièrent 'faraday' besoin 'json' nécessite 'lancement' '#Greet l'utilisateur insère "Salut! Quel subreddit? Exemple: Pour r / aww, tapez simplement aww" sub = gets.chomp! .To_s.downcase # La réponse en sortie met "Vous obtenez les meilleurs messages pour / r / # sous". " #Obtenir le flux JSON de la réponse Reddit sélectionnée = Faraday.get "http://www.reddit.com/r/#subBuch.json" json_response = JSON.parse response.body posts = json_response ['data'] [' children '] #Passez sur le fil et sortez les posts i = 1 posts.take (10) .each do | p | post = p ['data'] met "# i." + post ['title'] met "Ups: # post ['ups'] | Downs: # post ['downs'] | Score : # post ['score'] "met" i + = 1 et #Present option pour lancer toute publication dans le navigateur par défaut met "Voulez-vous ouvrir l’un d’entre eux? Choisissez le numéro à ouvrir ou répondez 'Non' "open_url = gets.chomp! .To_s si open_url.downcase ==" non "|| open_url.to_i> 10 met" ok "sinon Launchy.open posts [open_url.to_i - 1] ['data'] ['url'] end

Enregistrez le fichier sous check_reddit.rb dans le Les documents dossier. Pour exécuter le script, ouvrez Terminal et courir ruby ~ / Documents / check_reddit.rb.

Création d'un alias pour le script

Être capable de courir ruby ~ / Documents / check_reddit.rb c’est bien, mais ce serait mieux si vous pouviez taper check-reddit dans le terminal et faire exécuter le script comme par magie.

Pour ce faire, vous pouvez aliaser le mot check-reddit à la commande ruby ~ / Documents / check_reddit.rb. En terminal nano ~ / .bash_profile . Cela chargera le bash_profile fichier dans un éditeur de texte. 

Flèche vers le bas pour déplacer le curseur sous tout texte existant et ajouter alias check-reddit = "ruby ~ / Documents / check_reddit.rb" à une nouvelle ligne. 

Pour quitter et sauvegarder le fichier, appuyez sur Control-X. Vous serez invité à enregistrer les modifications. appuyez sur la Y clé alors Revenir confirmer. Exécuter un source ~ / .bash_profile recharger le bash_profile dans Terminal.

Conclusion

A partir de maintenant, tu pourras courir check-reddit dans le terminal pour surfer avec style.

La possibilité de voir les 10 meilleurs messages dans n’importe quel sous-Reddit via le terminal est impressionnante. Il vous permet de surfer rapidement sur Reddit, sans attirer l'attention sur vous et même de donner l'impression que vous êtes au travail.. 

En cours de route, vous avez également appris quelques notions de base sur Ruby et JSON. Bon travail!