quoting naddr1qvâŠq0p4đ ïž Il ne sâagit pas vraiment dâun article, mais plutĂŽt dâun partage du script Python que jâutilise pour publier automatiquement sur Nostr đ #nostrfr
đ PrĂ©-requis
1 - đ GĂ©nĂ©rer une paire de clĂ©s secrĂšte/publique pour le compte qui publiera les articles.
2 - â° AccĂ©der au fichier crontab afin dâautomatiser la rĂ©cupĂ©ration des articles Ă intervalle rĂ©gulier (sous Linux ou Mac, bien sĂ»r đ).
3 - đ Installer les bibliothĂšques Python importĂ©es au dĂ©but du script.
âïž Explications
Ce script : - đ utilise la clĂ© secrĂšte NSEC nsecXXXXX ;
đ publie sur 5 relais : nos.lol, relay.damus.io, relay.snort.social, relay.primal.net et relay.mostr.pub;
đ° rĂ©cupĂšre le flux RSS https://www.01net.com/actualites/feed/ ;
đŸ stocke la liste des articles dĂ©jĂ publiĂ©s â afin dâĂ©viter les doublons â dans /home/nostr/01net_deja_publies.txt ;
đŁ publie automatiquement les nouveaux articles sur Nostr.
đĄ Libre Ă vous de lâadapter Ă vos propres flux RSS, relais ou besoins spĂ©cifiques !
import feedparser import time import os import pytz from datetime import datetime from nostr.event import Event from nostr.key import PrivateKey from nostr.relay_manager import RelayManager # --- CONFIGURATION --- NSEC = "nsecXXXXX" FICHIER_LOG = "/home/nostr/01net_deja_publies.txt" FUSEAU_PARIS = pytz.timezone('Europe/Paris') # On limite Ă 4 relais RELAIS = [ "wss://nos.lol", "wss://relay.damus.io", "wss://relay.snort.social", "wss://relay.primal.net", "wss://relay.mostr.pub" ] def envoyer_une_note(message, url_article, pk): """Envoie la note avec un tag r pointant vers l'article original.""" event = Event( content=message, public_key=pk.public_key.hex(), tags=[ ["r", url_article] ] ) pk.sign_event(event) succes_un_relais = False for r in RELAIS: manager = RelayManager() manager.add_relay(r) try: print(f"đĄ Tentative individuelle sur {r}...") manager.open_connections() time.sleep(5) manager.publish_event(event) time.sleep(2) print(f" â SuccĂšs probable sur {r}") succes_un_relais = True except Exception as e: print(f" â Ăchec sur {r} : {e}") finally: manager.close_connections() return succes_un_relais def publier_sur_nostr(): try: pk = PrivateKey.from_nsec(NSEC) except Exception: print("â ClĂ© NSEC invalide.") return if not os.path.exists(FICHIER_LOG): open(FICHIER_LOG, "w").close() with open(FICHIER_LOG, "r") as f: liens_connus = set(line.strip() for line in f) print(f"đĄ Analyse du flux - {datetime.now(FUSEAU_PARIS).strftime('%H:%M:%S')}") flux = feedparser.parse("https://www.01net.com/actualites/feed/") maintenant_paris = datetime.now(FUSEAU_PARIS) envoyes = 0 for article in flux.entries: ts_article = time.mktime(article.published_parsed) date_article_paris = datetime.fromtimestamp(ts_article, FUSEAU_PARIS) difference = (maintenant_paris - date_article_paris).total_seconds() # FenĂȘtre de 24h if 0 <= difference < 86400: if article.link not in liens_connus: print(f"đ Article : {article.title[:50]}...") message = ( f"đ° {article.title}\n\n" f"#actualites #tech #01net\n\n" f"{article.link}" ) if envoyer_une_note(message, article.link, pk): with open(FICHIER_LOG, "a") as f: f.write(f"{article.link}\n") envoyes += 1 elif difference >= 86400: break print(f"đ Session terminĂ©e. Articles postĂ©s : {envoyes}") if __name__ == "__main__": publier_sur_nostr() os._exit(0)
Gerfon on Nostr: đšâđ» Je vous partage le script python que j'utilise pour rĂ©cupĂ©rer les ...
đšâđ» Je vous partage le script python que j'utilise pour rĂ©cupĂ©rer les articles d'un flux rss et les publier sur Nostr. Adaptez-le pour vos besoins et n'hĂ©sitez pas Ă le corriger si nĂ©cessaire. #nostrfr #python #nostr #rss
