Како да извучете листу тема са Субреддита користећи Басх

Реддит нуди ЈСОН феедове за сваки субреддит. Ево како да направите Басх скрипту која преузима и анализира листу постова са било ког субреддита који вам се свиђа. Ово је само једна ствар коју можете да урадите са Реддит ЈСОН фидовима.

Инсталирање Цурл и ЈК

Користићемо цурл да преузмемо ЈСОН фид са Реддита, а јк да рашчланимо ЈСОН податке и издвојимо поља која желимо из резултата. Инсталирајте ове две зависности користећи апт-гет на Убунту и друге дистрибуције Линука засноване на Дебиан-у. У другим Линук дистрибуцијама, користите алатку за управљање пакетима ваше дистрибуције.

sudo apt-get install curl jq

Преузмите неке ЈСОН податке са Реддита

Хајде да видимо како изгледа фид података. Користите цурл да преузмете најновије постове са МилдлиИнтерестинг субреддит:

curl -s -A “reddit scraper example” https://www.reddit.com/r/MildlyInteresting.json

Обратите пажњу на то како опције које се користе пре УРЛ-а: -с приморавају цурл да ради у нечујном режиму, тако да не видимо никакав излаз, осим података са Реддит сервера. Следећа опција и параметар који следи, „пример реддит стругача“, поставља прилагођени стринг корисничког агента који помаже Реддиту да идентификује услугу која приступа њиховим подацима. Реддит АПИ сервери примењују ограничења брзине на основу стринга корисничког агента. Подешавање прилагођене вредности ће довести до тога да Реддит сегментира наше ограничење брзине од других позивалаца и смањиће шансе да добијемо ХТТП 429 грешку прекорачења ограничења брзине.

  Како се придружити нечијем уживо на ТикТок-у

Излаз би требао попунити прозор терминала и изгледати отприлике овако:

Постоји много поља у излазним подацима, али све што нас занима су наслов, стална веза и УРЛ. Можете видети исцрпну листу типова и њихових поља на страници Реддит АПИ документације: хттпс://гитхуб.цом/реддит-арцхиве/реддит/вики/ЈСОН

Екстраховање података из ЈСОН излаза

Желимо да издвојимо наслов, сталну везу и УРЛ из излазних података и сачувамо их у датотеци раздвојеној табулаторима. Можемо да користимо алате за обраду текста као што су сед и греп, али на располагању имамо још један алат који разуме ЈСОН структуре података, који се зове јк. За наш први покушај, хајде да га користимо за лепо штампање и кодирање у боји на излазу. Користићемо исти позив као и раније, али овог пута проведите излаз кроз јк и упутите га да анализира и одштампа ЈСОН податке.

curl -s -A “reddit scraper example” https://www.reddit.com/r/MildlyInteresting.json | jq .

Обратите пажњу на тачку која следи након наредбе. Овај израз једноставно анализира улаз и штампа га какав јесте. Излаз изгледа лепо форматиран и кодиран бојама:

Хајде да испитамо структуру ЈСОН података које добијамо са Реддита. Основни резултат је објекат који садржи два својства: врсту и податке. Потоњи има својство под називом деца, које укључује низ постова на овом подредиту.

Свака ставка у низу је објекат који такође садржи два поља која се називају врста и подаци. Својства која желимо да зграбимо налазе се у објекту података. јк очекује израз који се може применити на улазне податке и производи жељени излаз. Мора описати садржај у смислу њихове хијерархије и припадности низу, као и како би подаци требало да се трансформишу. Хајде да поново покренемо целу наредбу са исправним изразом:

curl -s -A “reddit scraper example” https://www.reddit.com/r/MildlyInteresting.json | jq ‘.data.children | .[] | .data.title, .data.url, .data.permalink’

Излаз приказује наслов, УРЛ и сталну везу сваки у свом реду:

  6 најбољих платформи за крипто трговину за куповину биткоина у Индији

Хајде да заронимо у команду јк коју смо позвали:

jq ‘.data.children | .[] | .data.title, .data.url, .data.permalink’

У овој команди постоје три израза раздвојена са два симбола у облику слова. Резултати сваког израза се прослеђују следећем ради даље евалуације. Први израз филтрира све осим низа Реддит листа. Овај излаз се преноси у други израз и форсира у низ. Трећи израз делује на сваки елемент у низу и издваја три својства. Више информација о јк и његовој синтакси израза можете пронаћи у јк-ов званични приручник.

Стављајући све заједно у скрипту

Хајде да спојимо АПИ позив и ЈСОН накнадну обраду у скрипту која ће генерисати датотеку са постовима које желимо. Додаћемо подршку за преузимање постова са било ког субреддита, не само /р/МилдлиИнтерестинг.

Отворите уређивач и копирајте садржај овог исечка у датотеку под називом сцрапе-реддит.сх

#!/bin/bash

if [ -z "$1" ]
  then
    echo "Please specify a subreddit"
    exit 1
fi

SUBREDDIT=$1
NOW=$(date +"%m_%d_%y-%H_%M")
OUTPUT_FILE="${SUBREDDIT}_${NOW}.txt"

curl -s -A "bash-scrape-topics" https://www.reddit.com/r/${SUBREDDIT}.json | 
        jq '.data.children | .[] | .data.title, .data.url, .data.permalink' | 
        while read -r TITLE; do
                read -r URL 
                read -r PERMALINK
                echo -e "${TITLE}t${URL}t${PERMALINK}" | tr --delete " >> ${OUTPUT_FILE}
        done

Ова скрипта ће прво проверити да ли је корисник унео име за субреддит. Ако не, излази се са поруком о грешци и повратним кодом који није нула.

Затим ће сачувати први аргумент као име субреддит-а и направити име датотеке са датумом где ће се сачувати излаз.

Радња почиње када се позове цурл са прилагођеним заглављем и УРЛ-ом субреддита за сцрапе. Излаз се шаље у јк где се рашчлањује и своди на три поља: Наслов, УРЛ и Пермалинк. Ови редови се читају, један по један, и чувају у променљивој помоћу команде реад, све унутар вхиле петље, која ће се наставити све док више не буде редова за читање. Последњи ред унутрашњег вхиле блока одражава три поља, ограничена табулатором, а затим га преноси кроз команду тр тако да се двоструки наводники могу уклонити. Излаз се затим додаје датотеци.

  Како управљати најпопуларнијим сајтовима и истакнутим садржајима у Фирефок-у

Пре него што можемо да извршимо ову скрипту, морамо да се уверимо да су јој додељене дозволе за извршавање. Користите команду цхмод да примените ове дозволе на датотеку:

chmod u+x scrape-reddit.sh

И, на крају, извршите скрипту са субреддит именом:

./scrape-reddit.sh MildlyInteresting

Излазна датотека се генерише у истом директоријуму и њен садржај ће изгледати отприлике овако:

Сваки ред садржи три поља која тражимо, одвојена табулатором.

Иде даље

Реддит је златни рудник занимљивог садржаја и медија, и свему му се лако приступа помоћу ЈСОН АПИ-ја. Сада када имате начин да приступите овим подацима и обрадите резултате, можете да урадите следеће:

Узмите најновије наслове са /р/ВорлдНевс и пошаљите их на радну површину користећи обавести-пошаљи
Интегришите најбоље шале из /р/ДадЈокес у поруку свог система
Преузмите најбољу данашњу слику са /р/авв и учините је позадином радне површине

Све ово је могуће помоћу достављених података и алата које имате на свом систему. Срећно хаковање!