Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3 import sys import requests import datetime from bs4 import BeautifulSoup from urllib.parse import urlparse
- def get_hn_items(username): url = f"https://hacker-news.firebaseio.com/v0/user/{username}.json"
- resp = requests.get(url) if resp.status_code != 200:
- sys.exit(f"Failed to fetch HN user: {resp.status_code}") data = resp.json()
- return data.get("submitted", [])
- def get_hn_item(item_id): url = f"https://hacker-news.firebaseio.com/v0/item/{item_id}.json"
- resp = requests.get(url) if resp.status_code != 200: return None return resp.json() def fetch_lobsters_date(article_url):
- params = {"q": article_url, "what": "stories", "order": "newest"} resp = requests.get("https://lobste.rs/search", params=params) if resp.status_code != 200:
- return None soup = BeautifulSoup(resp.text, "html.parser")
- for link in soup.find_all("a", class_="u-url"):
- if link.get("href") != article_url:
- continue time_tag = link.find_next("time")
- if not time_tag or not time_tag.has_attr("datetime"):
- continue
- raw = time_tag["datetime"] # e.g. "2025-06-01 01:23:30-0500"
- try:
- lob_dt = datetime.datetime.strptime(raw, "%Y-%m-%d %H:%M:%S%z")
- except ValueError: continue
- lob_utc = lob_dt.astimezone(datetime.timezone.utc).replace(tzinfo=None)
- return lob_utc
- return None
- def truncate(text, length=60):
- return text if len(text) <= length else text[:length-3] + "..."
- def main():
- if len(sys.argv) != 2:
- sys.exit("Usage: script.py <hn_username>")
- username = sys.argv[1]
- item_ids = get_hn_items(username)
- for item_id in item_ids: item = get_hn_item(item_id)
- if not item or item.get("type") != "story":
- continue
- title = item.get("title", "")
- url = item.get("url")
- if not url: continue hn_ts = item.get("time", 0)
- hn_time = datetime.datetime.fromtimestamp(hn_ts, datetime.timezone.utc).replace(tzinfo=None) lob_time = fetch_lobsters_date(url) if not lob_time:
- continue delta = hn_time - lob_time
- seconds = delta.total_seconds()
- relation = "earlier" if seconds > 0 else "later" if seconds < 0 else "same"
- domain = urlparse(url).netloc short_title = truncate(title)
- print(f"{seconds} seconds {relation} - {domain} - {short_title}") if __name__ == "__main__": main()
Advertisement
Add Comment
Please, Sign In to add comment