Skip to content

Instantly share code, notes, and snippets.

@KateLibC
Last active March 20, 2017 14:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KateLibC/fdec5c1754a7e6b93373f09d881b3ee0 to your computer and use it in GitHub Desktop.
Save KateLibC/fdec5c1754a7e6b93373f09d881b3ee0 to your computer and use it in GitHub Desktop.
from BeautifulSoup import BeautifulSoup
import requests
from slacker import Slacker
slack = Slacker('api key from slack goes here')
target = 'https://nameofslack.slack.com'
targetLogin = 'slackloginemail'
targetPassword = 'password'
def manualLogin(username, password, target):
data = {'signin': 1, 'redir': '', 'email': username, 'password': password}
s = requests.session()
r = s.get(target)
html = BeautifulSoup(r.text)
form = html.findAll('form', {'id': 'signin_form'})[0]
data['crumb'] = form.findAll('input', {'name': 'crumb'})[0]['value']
r = s.post(target, data=data)
return s
def cleanEmote(tag):
if tag[:1] == ':' and tag[-1:] == ':':
tag = tag[1:-1]
return tag
def retrieveData():
targetURL = 'https://forums.somethingawful.com/misc.php?action=showsmilies'
r = requests.get(targetURL)
return r.text
def processData(data):
html = BeautifulSoup(data)
lis = html.findAll('li', {'class': 'smilie'})
o = {}
for li in lis:
img = li.findAll('img')[0]['src']
text = cleanEmote(li.findAll('div')[0].text)
o[text] = img
return o
def getSlackEmojis():
d = slack.emoji.list()
return d.body['emoji']
def checkAgainstSlack(data):
slackData = getSlackEmojis()
o = {}
for emote, url in data.iteritems():
if emote not in slackData and emote not in [':)', ':(']:
o[emote] = url
return o
def retrieveEmote(url):
r = requests.get(url)
return r.content
def uploadEmoji(session, target, tag, url):
u = '{}/customize/emoji'.format(target)
data = {'add': 1, 'name': tag, 'mode': 'data'}
r = session.get(u)
html = BeautifulSoup(r.text)
data['crumb'] = html.findAll('input', {'name': 'crumb'})[0]['value']
files = {'img': retrieveEmote(url)}
r = session.post(u, data=data, files=files, allow_redirects=False)
r.raise_for_status()
if b'alert_error' in r.content:
print 'Error ({}): Likely not valid size-wise.'.format(tag)
d = retrieveData()
n = processData(d)
o = checkAgainstSlack(n)
s = manualLogin(targetLogin, targetPassword, target)
for tag, url in o.iteritems():
print 'Uploading: {}'.format(tag)
uploadEmoji(session=s, target=target, tag=tag, url=url)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment