Build a Reddit Bot Part 1
Build a Reddit Bot Series
Part 1: Read posts from reddit
Part 2: Reply to posts
osa 3: automatisoi Bottimme
osa 4: Marvin masentunut botti
johdanto
joten aiomme rakentaa yksinkertaisen Reddit-Botin, joka tekee kaksi asiaa:
- se seuraa tiettyä subredditiä uusien virkojen varalta, ja kun joku lähettää ”I love python”, se vastaa ”me too!”.
-
se seuraa myös kaikkia kommentteja viimeaikaisiin viesteihin, ja jos se löytää sellaisen, jossa lukee ”vihaan Pythonia”, se lähettää linkin/r / learnpython ja pyytää kommentoijaa esittämään siellä kysymyksen.
ennakkotieto
vaaditaan vain Pythonin perustieto, sillä bottien rakentaminen on melko helppoa.
Osa 1
ensimmäisessä osassa nähdään, miten Redditin dataa voi lukea Reddit-sovellusliittymän avulla. Lähdekoodi löytyy osoitteesta github:
Edit: lukijan kommentin perusteella Farid:
Reddit on päivittänyt verkkosivunsa uuteen ilmeeseen. Jos törmäät yllä olevaan linkkiin, joka ei toimi, sinun täytyy muuttaa url-osoitetta.
tässä on esimerkki:
yllä on linkki http://www.reddit.com/dev/api
vielä, sitä ei löydy. Jos vaihdamme linkin http://old.reddit.com/dev/api, linkin pitäisi toimia.
lyhyesti, jos reddit-linkki ei toimi, vaihda ” www ””vanhaksi”, joten linkki näyttää ”old.reddit.com”
Ohjelmistobotti
ohjelmistobotti on ohjelma, joka voi olla vuorovaikutuksessa verkkosivujen kanssa itsenäisesti. Ne voivat olla niin yksinkertaisia tai monimutkaisia kuin haluat niiden olevan.
botti pyörii taustalla ja valvoo verkkosivuja. Kun se näkee muutoksen (kuten Redditin postauksen), se voi vastata siihen, äänestää tai tehdä minkä tahansa muun tehtävän, johon se on ohjelmoitu.
Seurantasivustoja
on monia tapoja seurata verkkosivuja. Voit käyttää web scraping työkaluja, kuten urlib tai Beautifulsoup mitään vastaavaa. Tässä on kuitenkin pieni ongelma. Botit voivat tehdä tuhansia pyyntöjä sekunnissa, ja tämä voi ylikuormittaa palvelimia. Joten useimmat suuret sivustot kieltää botit. Älä välitä tästä omalla vastuullasi. Olen ollut kielletty Google tuntikausia, oli minun Gmail lukittu kunnes tulin tusina captachas, minun mobiili ja nimi minun ensimmäinen kissa.
Jos haluat tehdä tämän oikein, noudata sivuston sääntöjä.
Reddit API
Reddit tarjoaa API: n, ja toisin kuin jotkut sivustot, se on itse asiassa melko helppokäyttöinen. Se perustuu lepoon ja jsoniin, joten teoriassa se ei vaadi mitään hienoja asetelmia.
http://www.reddit.com/dev/api
tärkeää on noudattaa heidän asettamiaan sääntöjä. Kaksi tärkeintä ovat:
- voit tehdä vain yhden pyynnön joka 2.sekunti (tai 30 minuutissa)
- et saa valehdella käyttäjäagentistasi
Lue loput täältä.
käyttäjäagentti tunnistaa selaimen. Pythonin URL-osoitteen kaltaisia kirjastoja rajoitetaan Redditissä ankarasti väärinkäytösten estämiseksi. Reddit suosittelee käyttämään omaa erityistä käyttäjäagenttiaan, ja niin me teemme.
API: n käyttäminen
API on melko helppo käyttää, kuten sanoin. Teet LEPOPYYNNÖN, ja tämä voidaan tehdä urlib2: n kautta (kunhan asetat käyttäjäagentin oikein). Näin sinä sen tekisit. Olen laittanut kaksi linkkiä alle. Avaa molemmat uudella välilehdellä:
http://www.reddit.com/r/learnPython/
http://www.reddit.com/r/learnPython/hot/.json
ensimmäinen on se, miten ihminen sen näkisi. Toinen on se, miten koodisi näkee sen. Kuten näette, JSONin saaminen on melko helppoa.
Ongelmana tässä lähestymistavassa on se, että sinun on vielä varmistettava, että arvostelet rajoitetusti pyyntöjäsi. Sinun täytyy myös jäsentää json itse. JSON on helppo jäsentää Python, koska se on pohjimmiltaan Python sanakirja, mutta jos todella tarkastellaan json, on paljon tietoa.
Introducing Praw
Praw on kirjasto, joka korjaa monia näistä ongelmista puolestasi. Se rajoittaa kuinka monta pyyntöä voit tehdä, ja se helpottaa purkaa json. Asenna se:
pip install praw
|
ensin pitää tehdä jokin setup.
luo Reddit-sovellus
mene: https://www.reddit.com/prefs/apps/
ja valitse Luo sovellus:
anna sille nimi. Sinun täytyy valita uudelleenohjaus uri (jostain typerästä syystä, tyhmä, koska Im rakentaa botti, ei webapp, mutta mitä tahansa). Valitsin http://127.0.0.1
nyt saat client_id (punainen laatikko alla) ja secret (sininen laatikko alla). Kirjoita muistiin, mutta pidä se salassa.
nyt sinun täytyy päivittää praw ini-tiedostosi, jotta muistat nämä asetukset. Muuten, sinun täytyy laittaa ne käsikirjoituksen ja thats vaarallista (kuten muut saattavat nähdä ne).
tällä sivulla kerrotaan, miten katkaravut vaihdetaan.INI-tiedostot: https://praw.readthedocs.io/en/v4.0.0/getting_started/configuration/prawini.html
löydät tiedoston Python install-kansiostasi kohdasta Lib\Site-Packages\praw\praw.ini
Update: kuten Bryce huomauttaa kommenteissa:
en suosittele paketin tason muuttamista praw.ini
, koska nämä muutokset korvataan joka kerta, kun pakettia päivitetään. Sen sijaan praw.ini
tulisi sijoittaa hakemistoon, josta ohjelma ajetaan (usein samaan hakemistoon kuin tiedosto).
muut vaihtoehdot on määritelty tässä: https://praw.readthedocs.io/en/latest/getting_started/configuration/prawini.html#praw-ini-files
suosittelen noudattamaan Brycen neuvoa.
Lisää ylös mainitsemamme arvot:
client_id ja client_secret ovat mitä kirjoitit ylös. Käyttäjätunnus ja salasana ovat tilisi tiedot (ja valinnainen, jos haluat vain luku-oikeus).
on uusi kenttä: user_agent.
Muistatko, että Redditin sääntöjen mukaan sinulla täytyy olla tietty käyttäjäagentti? Valitsen nimen PyEng Bot. Numero lopussa on versio. Tämä on suositeltavaa, koska kun koodi on siellä, ihmiset saattavat käyttää sitä väärin. Jos joku lähettää Redditiin koodisi, Reddit kieltää kyseisen käyttäjäagentin.
siinä tapauksessa vain siirretään versiota ylöspäin. Ei ihanteellinen, mutta sinun täytyy hyväksyä, että koodi voi käyttää väärin roskapostittajat.
käydään koodi nyt läpi. Lataa se GitHubista.
tuomme katkarapuja.
1
2
3
|
Reddit = praw.Reddit(”bot1”)
subreddit = r.subreddit (”learnpython”)
|
luomme Reddit-instanssin bot1: n alle tallentamiemme arvojen avulla.
sitten saadaan subreddit learnpython.
nyt, jos katsot subreddit, näet, että siellä on kuuma välilehti. Tämä ei kerro lämpötilasta siellä tai siitä, että siellä olisi ronskeja uimapukumalleja. Se tarkoittaa suosituimpia julkaisuja. Sen me nyt luemme. Funktio tähän on get_hot ().
saamme 5 kuuminta lähetystä. Tässä vaiheessa voit tehdä tämän nähdäksesi mitkä toiminnot ovat käytettävissä (voit tehdä sen missä tahansa vaiheessa, tai katsoa Praw ’ n dokumentaatiota).
näpertelevän listan näkeminen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
25
26
div>27 28 |
nostan esiin muutaman tärkeän. Otsikko on otsikko, sellaisena kuin se näkyy Redditin pääsivulla. Selftext on valinnainen teksti voit laittaa virkaa-useimmat viestit eivät ole näitä. learnpython on ainutlaatuinen, että useimmat viestit eivät ole tekstiä (yleensä juliste kysyy heidän kysymyksensä), minkä vuoksi olen valinnut sen. pistemäärä on kokonaispistemäärä, johon lasketaan yhteen ylä-ja alaviitteet (jotka molemmat ovat myös käytettävissä).
nämä kolme tulostamme:
1
2
3
4
5
|
toimitettavaksi subreddit.hot (limit=5):
print(”Title:”, submission.title)
print(”Text: ”, submission.selftext)
print(”Score: ”, submission.score)
print(”———————————\n”)
|
That ’ s it. Suorita skripti ja avaa Reddit selaimessa samaan aikaan. Tarkista, että saat oikeat tulokset.
seuraavan kerran
seuraavan kerran tarkastelemme, miten lähettää vastaus Redditissä olevaan postaukseen. Seuraava osa