Last active
March 20, 2017 14:29
-
-
Save KateLibC/fdec5c1754a7e6b93373f09d881b3ee0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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