Controleer Reddit vanuit OS X Terminal

screencast

Reddit is een sociaal netwerk dat de laatste jaren enorm populair is geworden. Het is door de gebruiker gestuurde inhoudsmodel is een geweldige plek om nieuws, humor, dingen die je nooit wist dat je wilde weten te vinden, en sommige dingen die je nooit kunt zien. Het is geweldig!

Een groot deel van de populariteit van Reddit komt van het begrip subredits. Dit zijn niets meer dan berichten die op één hoop worden gegooid door een gewone persoon, plaats, item of ideaal. Als een voorbeeld, een van de meest populaire sub-reddits tot nu toe is r / aww. Een subreddit gevuld met niets anders dan foto's van schattige dieren.

Was er maar een manier om Reddit op het werk te surfen zonder teveel aandacht aan jezelf te trekken (of op het scherm).

In deze zelfstudie laat ik je zien hoe je Reddit vanuit Terminal kunt surfen. Je leert:

  • Basic Ruby-code syntaxis
  • De JSON-feed van Reddit en hoe deze het script helpt uitvoeren
  • Hoe de JSON-feed te analyseren en weer te geven
  • Hoe het script een alias kan zijn voor een eenvoudige opdracht

Ruby Basics

Het eerste dat u moet weten, is hoe berichten naar de terminal kunnen worden verzonden en hoe u gebruikersinvoer vanuit de terminal kunt krijgen. Deze methoden zijn krijgt en puts, respectievelijk. 

Telkens wanneer u iets op het scherm wilt uitvoeren, gebruikt u de puts methode en wikkel de tekst tussen aanhalingstekens. Telkens wanneer u informatie van de gebruiker nodig hebt, gebruikt u de krijgt methode. 

U hebt nu een manier nodig om iets op te slaan dat de gebruiker invoert. Hiervoor gebruikt u variabelen. Om een ​​variabele te declareren, geeft u deze een naam en start u deze door deze te volgen met een = en voeg uiteindelijk een waarde toe om in te bewaren.

Dus de eerste regels van het programma zouden als volgt moeten luiden:

zet "Wat subreddit? Voorbeeld: / r / aww zet aww" sub = gets.chomp! .downcase zet "Haal je de topposities voor / r / # sub."

In de eerste regel groet je de gebruiker en vraag je hem om een ​​sub-reddit te kiezen. In de tweede regel maakt u de veranderlijk sub en het de waarde geven van wat de gebruiker ook opgeeft. 

De Chomp! en downcase methoden verwijderen alleen trailing witruimte en maken alle invoer in kleine letters, wat een beetje consistentie toevoegt. U kunt die variabele nu overal in de uitvoer opnemen door deze in te pakken # . Dit wordt stringinterpolatie genoemd.

JSON-feed van Reddit

JSON staat voor Javascript Object Notatie. Eenvoudig gezegd, het is gewoon een geweldige manier om alle gegevens van een bepaalde website (met een JSON API op zijn plaats) te pakken zonder alle extra opmaak of stijl. 

In de terminal wil je geen stijl of markeringen; alleen de gegevens. Dus JSON past hier goed in.

De JSON API van Reddit is doodeenvoudig in gebruik. Voeg een toe .json op elke Reddit-URL die u normaal gesproken in de webbrowser zou invoeren. Als voorbeeld: om de / r / aww JSON-feed te krijgen, gaat u naar http://www.reddit.com/r/aww.json.

De Reddit JSON-feed van / r / aww

Dat zijn veel gegevens. Gelukkig heeft Ruby al een eenvoudige manier om JSON te analyseren en krijgt u alleen de informatie die u nodig hebt.

De JSON-feed parseren

Om de feed te krijgen en te parseren, moet je enkele bestaande Ruby-bibliotheken installeren. Voer in de terminal de volgende opdrachten uit:

gem installeer Faraday
gem installeer json

Voeg vervolgens de volgende regels helemaal bovenaan toe:

vereisen 'faraday' vereisen 'json'

Met Faraday kunt u Ruby gebruiken om naar URL's op internet te bellen en met JSON kunt u de informatie die u terugkrijgt, ontleden. Zodra u deze nieuwe bibliotheken beschikbaar hebt, kunt u de volgende code gebruiken om:

  1. Grijp de gebruikersinvoer
  2. Genereer een URL
  3. Bel de URL en haal de JSON-feed terug
#Breng in extra libs vereisen 'faraday' vereisen 'json' #Greet de gebruiker zet "Wat subreddit? Voorbeeld: Voor r / aww, typ aww" sub = gets.chomp! .To_s.downcase #Output antwoord zet "Getting you the top berichten voor / r / # sub. " #Get JSON-feed van geselecteerde Reddit-reactie = Faraday.get "http://www.reddit.com/r/#sub.json" json_response = JSON.parse response.body posts = json_response ['data'] [' kinderen']

Herhaal (of loop) over elk van de berichten die je terugkrijgt en laat ze allemaal in een leesbaar formaat zien. Doe dit met behulp van een for-loop. Hier is de code die die taak volbrengt:

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

Als je jezelf de mogelijkheid wilt geven om een ​​van de berichten in de standaardbrowserrun van de Mac te openen gem installeren lancering

Voeg het vervolgens toe aan de lijst met andere bibliotheken die u invoegt door het toe te voegen vereisen 'launchy' naar de top van het bestand. 

Voeg tenslotte dit stuk code toe onder de for-lus:

#Present optie om een ​​bericht in standaardbrowser te plaatsen, zet in "Wilt u een van deze openen? Kies het te openen nummer of antwoord 'Nee'" open_url = gets.chomp! .To_s als open_url.downcase == "nee" || open_url.to_i> 10 plaatst "ok" anders Launchy.open berichten [open_url.to_i - 1] ['data'] ['url'] einde

Het volledige script zou er als volgt uit moeten zien:

#Breng in extra libs vereisen 'faraday' vereisen 'json' vereisen 'launchy' #Greet de gebruiker zet "Hallo! Welke subreddit? Voorbeeld: Voor r / aww, typ gewoon aww" sub = gets.chomp! .To_s.downcase # Uitvoerreactie zet "Haal je de topposities voor / r / # sub." #Get JSON-feed van geselecteerde Reddit-reactie = Faraday.get "http://www.reddit.com/r/#sub.json" json_response = JSON.parse response.body posts = json_response ['data'] [' kinderen '] #Itereer over de feed en voer de berichten uit i = 1 posts.take (10) .each do | p | post = p ['data'] plaatst "# i." + bericht ['title'] puts "Ups: # post ['ups'] | Downs: # post ['downs'] | Score : # post ['score'] "puts" i + = 1 end #Present-optie om een ​​bericht in standaardbrowser te starten "Wilt u een van deze openen? Kies het te openen nummer of antwoord 'Nee' "open_url = gets.chomp! .To_s als open_url.downcase ==" nee "|| open_url.to_i> 10 zet" ok "anders Launchy.open berichten [open_url.to_i - 1] ['data'] ['url'] einde

Sla het bestand op als check_reddit.rb in de documenten map. Als u het script wilt uitvoeren, opent u Terminal en loop ruby ~ / Documents / check_reddit.rb.

Een alias voor het script maken

Kunnen rennen ruby ~ / Documents / check_reddit.rb is allemaal goed en wel, maar het zou beter zijn als je kon typen Check reddit in de terminal en laat het script op magische wijze uitvoeren.

Om dit te bereiken, kunt u het woord alias Check reddit naar het commando ruby ~ / Documents / check_reddit.rb. In terminal run nano ~ / .bash_profile . Hierdoor wordt de bash_profile bestand in een teksteditor. 

Pijl naar beneden om de cursor onder een bestaande tekst te plaatsen en toe te voegen alias check-reddit = "ruby ~ / Documents / check_reddit.rb" naar een nieuwe regel. 

Om af te sluiten en het bestand op te slaan, drukt u op Controle-X. U wordt gevraagd de wijzigingen op te slaan. druk de Y sleutel dan terugkeer bevestigen. Voer een uit source ~ / .bash_profile om het te herladen bash_profile in Terminal.

Conclusie

Vanaf nu kun je rennen Check reddit in de terminal om in stijl te surfen.

De mogelijkheid om de top 10 berichten te zien in elke sub Reddit via de terminal is geweldig. Hiermee kun je Reddit snel bekijken, zonder aandacht te schenken aan jezelf en het zelfs doen lijken alsof je hard aan het werk bent. 

Onderweg heb je ook wat basis Ruby en JSON-vaardigheden opgepikt. Goed werk!