|
|
|
@ -1,5 +1,9 @@
|
|
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
"""
|
|
|
|
|
Detta är ELAB:s Slack-app.
|
|
|
|
|
|
|
|
|
|
Den har för närvarande i uppgift att göra "affiliate links" av Banggood-länkar.
|
|
|
|
|
"""
|
|
|
|
|
# Detta skript ska sitta bakom HTTPS och lyssna på anrop från Slack. (Kör
|
|
|
|
|
# "ngrok http 8000" för att få en tillfällig proxy för testning.) Lägg till
|
|
|
|
|
# "/slack/events" till den resulterande HTTPS-URL:en och använd som Request URL
|
|
|
|
@ -17,6 +21,7 @@ import locale
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def make_affiliate(url):
|
|
|
|
|
"""Tar en Banggood-URL och gör den till ELAB:s."""
|
|
|
|
|
u = furl(url)
|
|
|
|
|
# Lägg in ELABs ID. Egentligen vill vi skriva över endast parametern `p`,
|
|
|
|
|
# men för att komma runt en bugg med &-tecken rensar vi tills vidare bort
|
|
|
|
@ -29,6 +34,7 @@ def make_affiliate(url):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unfurl(url):
|
|
|
|
|
"""Skapar en presentation (rubrik, bild osv.) av en länk."""
|
|
|
|
|
# Ett semikolon hos Banggood kraschar extruct och måste plockas
|
|
|
|
|
# bort. <https://github.com/scrapinghub/extruct/issues/109>
|
|
|
|
|
page = requests.get(url).text.replace('};', '}')
|
|
|
|
@ -84,6 +90,7 @@ slack_client = SlackClient(token)
|
|
|
|
|
# Prenumerera på eventet `link_shared`.
|
|
|
|
|
@slack_events_adapter.on('link_shared')
|
|
|
|
|
def link_shared(event_data):
|
|
|
|
|
"""Anropas när någon har postat en länk i Slack."""
|
|
|
|
|
urls = [link['url'] for link in event_data['event']['links']]
|
|
|
|
|
unfurls = json.dumps({url: unfurl(make_affiliate(url))
|
|
|
|
|
for url in urls})
|
|
|
|
|