{"id":19059712,"url":"https://github.com/valeriogalano/readwise-to-linkedin","last_synced_at":"2026-06-29T00:32:00.040Z","repository":{"id":258642871,"uuid":"865386339","full_name":"valeriogalano/readwise-to-linkedin","owner":"valeriogalano","description":"Pubblica automaticamente le news di Pensieri in codice da Readwise sull'account LinkedIn del podcast","archived":false,"fork":false,"pushed_at":"2026-04-14T15:58:45.000Z","size":182,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-17T02:51:16.886Z","etag":null,"topics":["automation","cronjob","linkedin","pensieriincodice","python","readwise"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/valeriogalano.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-09-30T12:56:07.000Z","updated_at":"2026-04-14T15:58:50.000Z","dependencies_parsed_at":"2025-12-10T21:06:58.613Z","dependency_job_id":null,"html_url":"https://github.com/valeriogalano/readwise-to-linkedin","commit_stats":null,"previous_names":["valeriogalano/pensieriincodice-news-to-linkedin","valeriogalano/readwise-to-linkedin"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/valeriogalano/readwise-to-linkedin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valeriogalano%2Freadwise-to-linkedin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valeriogalano%2Freadwise-to-linkedin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valeriogalano%2Freadwise-to-linkedin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valeriogalano%2Freadwise-to-linkedin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/valeriogalano","download_url":"https://codeload.github.com/valeriogalano/readwise-to-linkedin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valeriogalano%2Freadwise-to-linkedin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34909137,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","cronjob","linkedin","pensieriincodice","python","readwise"],"created_at":"2024-11-09T00:11:24.534Z","updated_at":"2026-06-29T00:32:00.015Z","avatar_url":"https://github.com/valeriogalano.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pensieriincodice - News to Linkedin\n\nIl progetto ha lo scopo di pubblicare le news di PIC sull'account Linkedin del podcast.\n\nLe news vengono prelevate da Readwise. \n\n\n## Autenticazione\n\nPurtroppo le API di Linkedin non restituiscono un `refresh_token` e per ottenere ogni volta un `access_token`\nc'è bisogno dell'interazione utente che inserisca manualmente i dati di accesso.\n\nL'`access_token` ha validità 60 giorni.\n\n\n### Flusso \n\n![flusso di autenticazione](assets/sequence_auth.jpg)\n\nPer l'autenticazione è necessario avviare lo script `auth.py`.\n\nVerrà aperta una finestra del browser dove chiederà all'utente di inserire username e password dell'account Linkedin.\n\nUna volta che l'utente ha effettuato il login, il browser si chiuderà automaticamente\ne verrà memorizzato in un file json denominato `{today_date}.json` \n(ad es. `2024-10-04.json`) l'`access_token` e il `personal_urn` (id) dell'utente.\n\nQueste informazioni dovranno essere aggiornate nei secrets di github per poter far funzionare l'automazione.\n\n\n## Installazione in locale\n\n\n### Variabili di ambiente\n\nNel file `.env.example` ci sono le variabili di ambiente che devi compilare per completare l'autenticazione,\npuoi impostarle nel tuo IDE o nel sistema operativo in esecuzione.\n\nLe variabili necessarie l'autenticazione sono 3:\n\n```\nCLIENT_ID=\"\u003cLINKEDIN_CLIENT_ID_HERE\u003e\"\nCLIENT_SECRET=\"\u003cLINKEDIN_CLIENT_SECRET_HERE\u003e\"\nREADWISE_ACCESS_TOKEN=\"\u003cREADWISE_ACCESS_TOKEN_HERE\u003e\"\n```\n\nLe seguenti variabili sono opzionali perchè hanno nel codice un valore di default: \n\n```\nCALLBACK_URL_PORT=\"8000\"\nCALLBACK_URL_PROTOCOL=\"http\"\nCALLBACK_URL=\"localhost\"\nSCOPE=\"w_member_social openid profile\"\n```\n\nMentre le seguenti variabili:\n\n```\nACCESS_TOKEN=\u003cACCESS_TOKEN_HERE\u003e\nPERSONAL_URN=\u003cPERSONAL_URN_HERE\u003e\nLINKEDIN_MESSAGE_TEMPLATE=\"{title}\\n{notes}\\n\\n{link}\"\n```\n\nsono da inserire solo sul repo per consentire alla action di github di eseguire la pubblicazione.\n\nInfine se vuoi che lo script di autenticazione sincronizzi automaticamente via API il \ntuo `access_token` ed il tuo `personal_urn` senza che tu debba farlo manualmente ti basta inserire la \nvariabile di ambiente `GH_CSV`.\n\nNella variabile `GH_CSV` devi inserire sotto forma di CSV le seguenti informazioni:\n- proprietario del repository\n- nome del repository\n- token (puoi generare un token di GitHub seguendo questa procedura: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)\n\nPuoi inserire più repository inserendo il separatore `\\n` dopo ogni repository, ad es.\n\n```\nGH_CSV=\"\u003cowner\u003e,\u003crepo_name\u003e,\u003ctoken\u003e\\n\u003cowner\u003e,\u003crepo_name\u003e,\u003ctoken\u003e\"\n```\n\n\n### Installazione dei requirements\n\nPer installare le dipendenze di progetto lancia il seguente comando:\n\n```bash\npip install -r requirements.txt\n```\n\n\n### Avvia il processo di autenticazione\n\nPer avviare il processo di autenticazione:\n\n```bash\npython auth.py\n```\n\nInserisci le credenziali Linkedin nel browser che ti apparirà e attendi la chiusura del browser.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaleriogalano%2Freadwise-to-linkedin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvaleriogalano%2Freadwise-to-linkedin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaleriogalano%2Freadwise-to-linkedin/lists"}