add readme.md
This commit is contained in:
115
README.md
Normal file
115
README.md
Normal file
@@ -0,0 +1,115 @@
|
||||
# social-updater
|
||||
|
||||
Reads a YouTube channel's RSS feed every hour and automatically shares new videos to Facebook and LinkedIn.
|
||||
|
||||
## Getting started
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# fill in the tokens (see below)
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Obtaining API credentials
|
||||
|
||||
### `YOUTUBE_CHANNEL_ID`
|
||||
|
||||
No registration needed — this is a public RSS feed.
|
||||
|
||||
1. Open the channel page on YouTube.
|
||||
2. Read it from the URL: `youtube.com/channel/UC...` — the part starting with `UC` is the channel ID.
|
||||
3. If the channel has a custom URL (`@handle` format), open the channel's About page, click **Share**, then **Copy channel ID**.
|
||||
|
||||
---
|
||||
|
||||
### Facebook — `FACEBOOK_ACCESS_TOKEN` and `FACEBOOK_PAGE_ID`
|
||||
|
||||
Requirements: a Facebook **App** and a **Page** you have admin access to.
|
||||
|
||||
#### 1. Create a Facebook App
|
||||
|
||||
1. Go to [Meta for Developers](https://developers.facebook.com/).
|
||||
2. Click **My Apps → Create App → Business**.
|
||||
3. Enter the app name and create it.
|
||||
4. In the app dashboard, add the **Facebook Login** and **Pages API** products.
|
||||
|
||||
#### 2. Get a Page Access Token
|
||||
|
||||
1. Open the [Graph API Explorer](https://developers.facebook.com/tools/explorer/).
|
||||
2. Select your app from the dropdown.
|
||||
3. Click **Generate Access Token** and log in with your Facebook account.
|
||||
4. Request at least these permissions:
|
||||
- `pages_show_list`
|
||||
- `pages_read_engagement`
|
||||
- `pages_manage_posts`
|
||||
5. The generated token is a **User token** — exchange it for a **Page token**:
|
||||
```
|
||||
GET /{page-id}?fields=access_token
|
||||
```
|
||||
The `access_token` in the response is your Page Access Token.
|
||||
|
||||
#### 3. Long-lived token (recommended)
|
||||
|
||||
Short-lived tokens expire in ~1 hour. Get a long-lived token like this:
|
||||
|
||||
```
|
||||
GET https://graph.facebook.com/v19.0/oauth/access_token
|
||||
?grant_type=fb_exchange_token
|
||||
&client_id={app-id}
|
||||
&client_secret={app-secret}
|
||||
&fb_exchange_token={short-lived-token}
|
||||
```
|
||||
|
||||
Then fetch the Page token again using the step above — a Page token generated from a long-lived User token never expires.
|
||||
|
||||
#### 4. `FACEBOOK_PAGE_ID`
|
||||
|
||||
Found in the Page URL (`facebook.com/mypage`) or under the Page's **About** section → **Page ID**.
|
||||
|
||||
---
|
||||
|
||||
### LinkedIn — `LINKEDIN_ACCESS_TOKEN` and `LINKEDIN_AUTHOR_URN`
|
||||
|
||||
Requirements: a LinkedIn **App** associated with a **LinkedIn Page** or personal account.
|
||||
|
||||
#### 1. Create a LinkedIn App
|
||||
|
||||
1. Go to the [LinkedIn Developer Portal](https://www.linkedin.com/developers/apps).
|
||||
2. Click **Create app**.
|
||||
3. Enter the app name and associate it with your LinkedIn Page.
|
||||
4. After the app is verified, go to the **Products** tab and request access to **Share on LinkedIn** and **Sign In with LinkedIn using OpenID Connect**.
|
||||
|
||||
#### 2. Get an OAuth2 Access Token
|
||||
|
||||
Your `Client ID` and `Client Secret` are on the app's **Auth** tab.
|
||||
|
||||
Required scopes: `w_member_social` (personal post) or `w_organization_social` (company page).
|
||||
|
||||
The easiest way to generate a token is via the [LinkedIn OAuth 2.0 Tools](https://www.linkedin.com/developers/tools/oauth) page:
|
||||
|
||||
1. Select your app.
|
||||
2. Check the required scopes.
|
||||
3. Click **Request access token**.
|
||||
4. The token is valid for 60 days — you will need to refresh it after expiry.
|
||||
|
||||
#### 3. `LINKEDIN_AUTHOR_URN`
|
||||
|
||||
**Personal account:**
|
||||
|
||||
```
|
||||
GET https://api.linkedin.com/v2/userinfo
|
||||
Authorization: Bearer {access_token}
|
||||
```
|
||||
|
||||
The `sub` field in the response is the person ID. The URN format is `urn:li:person:{sub}`.
|
||||
|
||||
**Company / Page:**
|
||||
|
||||
```
|
||||
GET https://api.linkedin.com/v2/organizationalEntityAcls?q=roleAssignee
|
||||
Authorization: Bearer {access_token}
|
||||
```
|
||||
|
||||
The `organizationalTarget` field in the response contains the organization URN (`urn:li:organization:XXXXX`).
|
||||
Reference in New Issue
Block a user