@ -4,13 +4,20 @@ This is a toy I built so I wouldn't have to check the [Grand Forks 311](http://w
|
||||
app/website all the time.
|
||||
|
||||
It currently toots to Mastodon at [@hackgfk_311@botsin.space](https://botsin.space/@hackgfk_311).
|
||||
Toots are converted to Tweets ([@hackgfk_311](https://twitter.com/hackgfk_311)) with @renatolond's wonderful
|
||||
Toots are converted to tweets ([@hackgfk_311](https://twitter.com/hackgfk_311)) with @renatolond's wonderful
|
||||
crossposter: https://crossposter.masto.donte.com.br ([source code](https://github.com/renatolond/mastodon-twitter-poster)).
|
||||
|
||||
Written in R because I'm much quicker at that than Python, and it seemed like a fun use case.
|
||||
|
||||
Pull requests always welcome!
|
||||
|
||||
# 311_ebooks
|
||||
|
||||
In Python (because why stay consistent?), this script takes the corpus out of the local 311 database
|
||||
and builds an [ebooks-style](https://en.wikipedia.org/wiki/Horse_ebooks) toot using Markovify.
|
||||
|
||||
Currently tooting at [@hackgfk_311_ebooks@botsin.space](https://botsin.space/@hackgfk_311_ebooks).
|
||||
|
||||
-----
|
||||
# Hack Grand Forks
|
||||
|
||||
|
5
auth.ini.default
Normal file
5
auth.ini.default
Normal file
@ -0,0 +1,5 @@
|
||||
[mastodon]
|
||||
#needs trailing slash
|
||||
server = https://botsin.space/
|
||||
email = heck@yeah.com
|
||||
password = ReallyGoodPassword
|
61
bin/311_ebooks.py
Normal file
61
bin/311_ebooks.py
Normal file
@ -0,0 +1,61 @@
|
||||
|
||||
|
||||
import markovify #https://github.com/jsvine/markovify
|
||||
import sqlite3 #to read db
|
||||
from mastodon import Mastodon
|
||||
from configparser import ConfigParser
|
||||
import os.path
|
||||
|
||||
# Open the db
|
||||
conn = sqlite3.connect('requests.sqlite')
|
||||
c = conn.cursor()
|
||||
|
||||
def get_descriptions():
|
||||
c.execute('SELECT description FROM requests')
|
||||
data = c.fetchall()
|
||||
return(data)
|
||||
|
||||
# Get descriptions and convert to strings from tuples
|
||||
b = ["".join(str(x).replace("\\r\\n","")) for x in get_descriptions()]
|
||||
|
||||
# Build the model.
|
||||
text_model = markovify.Text(b)
|
||||
|
||||
# Print three randomly-generated sentences of no more than 280 characters
|
||||
#for i in range(3):
|
||||
# print(text_model.make_short_sentence(280))
|
||||
|
||||
# Next up use this to toot: https://github.com/halcy/Mastodon.py
|
||||
|
||||
# parse existing file
|
||||
config = ConfigParser()
|
||||
config.read('auth.ini')
|
||||
|
||||
# read values from a section
|
||||
server = config.get('hackgfk_311_ebooks', 'server')
|
||||
email = config.get('hackgfk_311_ebooks', 'email')
|
||||
password = config.get('hackgfk_311_ebooks', 'password')
|
||||
|
||||
# Register the app (once)
|
||||
if not os.path.isfile('hackgfk_311_ebooks_clientcred.secret'):
|
||||
Mastodon.create_app(
|
||||
'hackgfk_311_ebooks',
|
||||
api_base_url = server,
|
||||
to_file = 'hackgfk_311_ebooks_clientcred.secret'
|
||||
)
|
||||
|
||||
# Log in
|
||||
mastodon = Mastodon(
|
||||
client_id = 'hackgfk_311_ebooks_clientcred.secret',
|
||||
api_base_url = server,
|
||||
)
|
||||
mastodon.log_in(
|
||||
email,
|
||||
password,
|
||||
to_file = 'hackgfk_311_ebooks_usercred.secret'
|
||||
)
|
||||
|
||||
# Send toot
|
||||
toot = text_model.make_short_sentence(280)
|
||||
print(toot)
|
||||
mastodon.toot(toot)
|
Reference in New Issue
Block a user