Sjekk Reddit fra OS X Terminal

screen~~POS=TRUNC

Reddit er et sosialt nettverk som i de senere år har eksplodert i popularitet. Det er brukerdrevet innholdsmodell er et flott sted å finne nyheter, humor, ting du aldri visste at du ønsket å vite, og noen ting du aldri kan se. Det er flott!

Mye av Reddits popularitet kommer fra sin oppfatning av sub-reddits. Disse er ikke noe annet enn innlegg lumpet sammen av en felles person, sted, element eller ideell. Som et eksempel er en av de mest populære sub-reddits til dags dato r / aww. En sub-reddit fylt med ingenting, men bilder av bedårende dyr.

Hvis det bare var en måte å surfe Reddit på jobb uten å trekke for mye oppmerksomhet til deg selv (eller skjermen).

I denne veiledningen viser jeg deg hvordan du surfer Reddit fra Terminal. Du vil lære:

  • Grunnleggende syntakse for Ruby Code
  • Reddits JSON-feed og hvordan det vil hjelpe scriptet
  • Slik analyserer du JSON-strømmen og viser den
  • Slik alias skriptet til en enkel kommando

Ruby Grunnleggende

Det første du trenger å vite, er hvordan du sender meldinger til terminalen og hvordan du får brukerinngang fra terminalen. Disse metodene er blir og puts, henholdsvis. 

Når som helst du vil sende noe til skjermen, bruk puts Metode og pakk teksten i anførselstegn. Når som helst du trenger å få informasjon fra brukeren, bruk blir metode. 

Du trenger nå en måte å lagre alt brukeren kommer inn på. For å gjøre dette, vil du bruke variabler. For å erklære en variabel, gi den et navn, og start det ved å følge det med en = og til slutt legge til en verdi for å lagre i den.

Så bør de første linjene i programmet lese slik:

setter "What subreddit? Eksempel: / r / aww put aww" sub = gets.chomp! .downcase setter "Få deg de beste innleggene for / r / # sub."

I første linje hilser du brukeren og ber dem om å velge en subreddit. I den andre linjen oppretter du variabel under og gir det verdien av hva brukeren skriver inn. 

De Chomp! og downcase Metoder fjerner bare etterfølgende hvite plass og gjør alle de små bokstaver, noe som gir litt konsistens. Du kan nå inkludere denne variabelen hvor som helst i utgangen ved å pakke den inn # . Dette kalles strenginterpolering.

Reddit's JSON Feed

JSON står for Javascript Objektnotasjon. Enkelt sagt er det bare en fin måte å få tak i alle dataene fra et bestemt nettsted (som har en JSON API på plass) uten all den ekstra oppslaget eller stilen. 

I terminalen vil du ikke ha noen stil eller markering; bare dataene. Så passer JSON godt her.

Reddits JSON API er død enkel å bruke. Legg til a .json til en hvilken som helst Reddit URL du vanligvis vil legge inn i nettleseren. Som et eksempel: for å få / r / aww JSON feed, ville du gå til http://www.reddit.com/r/aww.json.

Reddit JSON-feed av / r / aww

Det er mye data. Heldigvis har Ruby allerede en enkel måte å analysere JSON på, og får deg bare den informasjonen du trenger.

Parsing JSON Feed

For å få fôret og analysere det, må du installere noen eksisterende Ruby-biblioteker. I terminalen kjører du følgende kommandoer:

perle installere faraday
perle installasjon json

Legg deretter til følgende linjer øverst i filen:

krever 'faraday' krever 'json'

Faraday vil tillate deg å bruke Ruby til å ringe til nettadresser på internett, og JSON hjelper deg med å analysere informasjonen du kommer tilbake. Når du har disse nye bibliotekene tilgjengelige, kan du bruke følgende kode til å:

  1. Ta tak i brukerinngangen
  2. Generer en URL
  3. Ring nettadressen og få JSON-strømmen tilbake
#Bring i flere libs krever 'faraday' krever 'json' #Greet brukeren setter "What subreddit? Eksempel: For r / aww, skriv aww" sub = gets.chomp! .To_s.downcase #Output response puts "Komme deg topp innlegg for / r / # sub. " #Get JSON-feed av valgt Reddit-respons = Faraday.get "http://www.reddit.com/r/#sub.json" json_response = JSON.parse respons.body posts = json_response ['data'] [' barn ']

For å iterere (eller loop) over hvert innlegg, kommer du tilbake og viser hver enkelt i et lesbart format. Gjør dette ved å bruke en for-loop. Her er koden som utfører den oppgaven:

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

Hvis du ønsker å gi deg selv muligheten til å åpne et av innleggene i Macs standard nettleservindu perle installasjon launchy

Legg deretter den til i listen over andre biblioteker du inkluderer, ved å legge til krever "lanserende" til toppen av filen. 

Til slutt legg til dette stykke kode under for-loop:

#Present alternativ for å starte et innlegg i standard nettleser setter "Vil du åpne noen av disse? Velg nummeret som skal åpnes, eller svar" Nei "" open_url = gets.chomp! .To_s if open_url.downcase == "no" || open_url.to_i> 10 setter "ok" ellers Launchy.open innlegg [open_url.to_i - 1] ['data'] ['url'] end

Det komplette skriptet skal se slik ut:

#Bring i flere libs krever 'faraday' krever 'json' krever 'lanserende' #Greet brukeren setter "Hei! Hva subreddit? Eksempel: For r / aww, skriv bare aww" sub = gets.chomp! .To_s.downcase # Output-svar setter "Få deg de beste innleggene for / r / # sub." #Get JSON-feed av valgt Reddit-respons = Faraday.get "http://www.reddit.com/r/#sub.json" json_response = JSON.parse respons.body posts = json_response ['data'] [' barn '] #Iterate over feed og utføre innleggene i = 1 posts.take (10) .each do | p | post = p ['data'] setter "# i." + post ['title'] setter "Ups: # post ['ups'] | Downs: # post ['downs'] | : # post ['score'] "setter" jeg + = 1 slutt #Present alternativ for å starte et innlegg i standard nettleser setter "Vil du åpne noen av disse? Velg nummeret som skal åpnes, eller svar "Nei" "open_url = gets.chomp! .To_s if open_url.downcase ==" no "|| open_url.to_i> 10 setter" ok "ellers Launchy.open innlegg [open_url.to_i - 1] ['data'] ['url'] slutten

Lagre filen som check_reddit.rbdokumenter mappe. For å kjøre skriptet, åpne Terminal og løp ruby ~ / Dokumenter / check_reddit.rb.

Opprette et alias til scriptet

Å kunne kjøre ruby ~ / Dokumenter / check_reddit.rb er alt bra og bra, men det ville være bedre hvis du kunne skrive innsjekking reddit i terminalen og har skriptet magisk kjøre.

For å oppnå dette kan du alias ordet innsjekking reddit til kommandoen ruby ~ / Dokumenter / check_reddit.rb. I terminal løp nano ~ / .bash_profile . Dette vil laste inn bash_profile filen i et tekstredigeringsprogram. 

Pil ned for å flytte markøren under eksisterende tekst og legg til alias check-reddit = "ruby ~ / Dokumenter / check_reddit.rb" til en ny linje. 

For å avslutte og lagre filen, trykk Kontroll-X. Du blir bedt om å lagre endringene. trykk Y nøkkel da Komme tilbake å bekrefte. Kjør a kilde ~ / .bash_profile å laste på nytt bash_profile inn i Terminal.

Konklusjon

Fra nå av kan du løpe innsjekking reddit i terminalen for å surfe i stil.

Evnen til å se de 10 beste innleggene i noen sub Reddit via terminalen er fantastisk. Det gjør at du raskt kan surfe på Reddit, uten å være oppmerksom på deg selv, og det gjør at det ser ut som om du er vanskelig på jobb. 

Underveis tok du opp noen grunnleggende Ruby og JSON ferdigheter. Flott jobb!