Remove old Python version of Twitter bot

This commit is contained in:
Jordan Eldredge 2021-01-01 00:31:21 -08:00
parent e0312e487f
commit f555894de4
4 changed files with 0 additions and 163 deletions

View file

@ -1,4 +0,0 @@
config.py
*.pyc
action_log.json
env/

View file

@ -1,5 +0,0 @@
# Tweet Bot
This "package" is actually a Python script. Originally the [@winampskins](https://twitter.com/winampskins) Twitter bot was a Python script that ran as a cron job. I've since rewritten most of it in JavaScript. The core part that actually talks to the Twitter API is still written in Python. That last remaining code can be found here.
Hopefully it will soon be rewritten in JavaScript.

View file

@ -1,154 +0,0 @@
#!/usr/bin/env python3
"""Tweet Winamp Skins
Usage:
tweet.py tweet <hash> <filename> [--dry]
tweet.py list
tweet.py debug
tweet.py sort
Options:
-h --help Show this screen.
--version Show version.
--dry Don't actually post a tweet
"""
import sys
import requests
import os
import re
import random
import json
import urllib
import hashlib
import twitter
from tempfile import NamedTemporaryFile
from PIL import Image
from docopt import docopt
from collections import defaultdict
from config import CONFIG
def get_api():
return twitter.Api(
consumer_key=CONFIG["consumer_key"],
consumer_secret=CONFIG["consumer_secret"],
access_token_key=CONFIG["access_token_key"],
access_token_secret=CONFIG["access_token_secret"],
)
def tweet(text, img_path=None):
api = get_api()
status = api.PostUpdate(text, img_path)
return "https://twitter.com/winampskins/status/%s" % status.id_str
def find(dir):
for root, _, files in os.walk(dir):
for file in files:
yield os.path.join(root, file)
def md5_file(path):
hash_md5 = hashlib.md5()
with open(path, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
def tweet_skin(md5, skin_name, dry):
screenshot_url = get_screenshot_url(md5)
screenshot_path = NamedTemporaryFile(suffix=".png").name
urllib.request.urlretrieve(screenshot_url, screenshot_path)
return tweet_image(skin_name, md5, screenshot_path, dry)
def get_screenshot_url(md5):
return "https://cdn.webampskins.org/screenshots/%s.png" % md5
def tweet_image(skin_name, md5, screenshot_path, dry):
# Trick Twitter into keeping the skin a PNG
img = Image.open(screenshot_path)
img = img.convert("RGBA") # ensure 32-bit
[w, h] = img.size
pixels = img.load()
# set bottom-right pixel to 254 alpha
pixels[w - 1, h - 1] = pixels[w - 1, h - 1][:3] + (243,)
# Resize to 2x so that pixels remain a bit more crisp when resized
w, h = (2 * w, 2 * h)
img = img.resize((w, h), 0)
img.save(screenshot_path)
museum_url = "https://skins.webamp.org/skin/%s" % md5
status_message = "%s\n\n%s" % (
skin_name,
museum_url,
)
if not dry:
return tweet(status_message, screenshot_path)
return "DUMMY URL"
# TODO: Deupe and make a generator
# TODO: Ignore replies
def get_all_tweets():
api = get_api()
min_id = None
done = False
tweets = []
while not done:
new_tweets = api.GetUserTimeline(
screen_name="winampskins",
trim_user=True,
count=200,
include_rts=False,
max_id=min_id,
)
min_id = min([tweet.id for tweet in new_tweets])
tweets.extend(new_tweets)
if len(new_tweets) == 1:
done = True
return tweets
def extract_hash(foo):
match = re.search(r"([a-fA-F\d]{32})", foo)
if match:
return match.group()
if __name__ == "__main__":
arguments = docopt(__doc__, version="Tweet Winamp Skins 0.1")
dry = arguments.get("--dry")
if arguments.get("list"):
filenames = open("filenames.txt", "w")
for f in find("../automatedScreenshots/skins"):
if f.endswith(".wsz"):
md5 = md5_file(f)
filenames.write("%s %s\n" % (md5, os.path.basename(f)))
elif arguments.get("tweet"):
hash = arguments.get("<hash>")
filename = arguments.get("<filename>")
print(tweet_skin(hash, filename, dry))
elif arguments.get("sort"):
api = get_api()
all_tweets = get_all_tweets()
for tweet in all_tweets:
hashes = [extract_hash(url.expanded_url) for url in tweet.urls]
if not len(hashes):
# print("No hash found in %s" % tweet)
# These are mostly replies
continue
if hashes[0]:
print("%s %s %s" % (hashes[0], tweet.favorite_count, tweet.id))