Compare commits

...
1 Commits
+7 -3
View File
@@ -12,11 +12,13 @@ from collections import Counter, defaultdict
BOT = re.compile(r"bot|crawl|spider|slurp|facebookexternalhit|slack|discord|twitter|whatsapp|telegram|preview|fetch|curl|python|go-http|wget|headless|scan|monitor|uptime", re.I) BOT = re.compile(r"bot|crawl|spider|slurp|facebookexternalhit|slack|discord|twitter|whatsapp|telegram|preview|fetch|curl|python|go-http|wget|headless|scan|monitor|uptime", re.I)
# Link previews: the app that fetched the page to show it in a conversation. The people # Link previews: the app that fetched the page to show it in a conversation. The people
# who click such a link arrive with no referrer, so this is the best sign of where it went. # who click such a link arrive with no referrer, so this is the best sign of where it went.
# Meta's crawlers (meta-externalagent, meta-webindexer) name facebook.com too but share nothing.
UNFURL = [ UNFURL = [
("Slack", re.compile(r"slack", re.I)), ("Slack", re.compile(r"slack", re.I)),
("Discord", re.compile(r"discord", re.I)), ("Discord", re.compile(r"discord", re.I)),
("Google Messages", re.compile(r"googlemessages", re.I)),
("iMessage", re.compile(r"facebookexternalhit.*twitterbot|applebot.*preview", re.I)), ("iMessage", re.compile(r"facebookexternalhit.*twitterbot|applebot.*preview", re.I)),
("Facebook", re.compile(r"facebookexternalhit|facebot|meta-externalagent", re.I)), ("Facebook", re.compile(r"facebookexternalhit|facebot", re.I)),
("WhatsApp", re.compile(r"whatsapp", re.I)), ("WhatsApp", re.compile(r"whatsapp", re.I)),
("Telegram", re.compile(r"telegram", re.I)), ("Telegram", re.compile(r"telegram", re.I)),
("Reddit", re.compile(r"redditbot", re.I)), ("Reddit", re.compile(r"redditbot", re.I)),
@@ -144,8 +146,10 @@ def scan(day, logs=LOGS):
t["bot"] += 1 t["bot"] += 1
t["botAddresses"].add(ip) t["botAddresses"].add(ip)
service = unfurled_by(ua) service = unfurled_by(ua)
# One share per app and page: a preview is often fetched twice. # One share per app and page: a preview is often fetched twice. Only a
if service and (service, path) not in seen_share: # page counts: an app that already holds a preview fetches its card
# image again to show it, and robots.txt and scripts are not shared.
if service and (path in PAGES or path.startswith("/join/")) and (service, path) not in seen_share:
seen_share.add((service, path)) seen_share.add((service, path))
t["shared"][service] += 1 t["shared"][service] += 1
continue continue