我在Reddit上發布了我的開源社群媒體調度工具Postiz ,並受到了很多關注。
我想開源界非常需要它。
我收到了開發人員關於我如何建置它的多個問題。
所以今天,我將帶您了解基礎設施以及需要考慮的事項。
每個社群媒體調度工具的核心都是 oAuth。讓我解釋一下。
oAuth 是不同平台的標準方式,可讓您存取其使用者以執行有限範圍的操作。
例如,您可以要求 Facebook 授予您在使用者時間軸上發佈或閱讀其分析的權限。
oAuth有時間限制但可以刷新,每個調度工具的核心是:
收集不同平台的oAuth。
需要時刷新它們。
使用它們在用戶時間線上發布。
由於您想要建立一個可以輕鬆加入越來越多社交平台的通用平台,因此您想要建立一個像這樣的介面(簡化版本):
export interface Provider {
generateAuthUrl(): Promise<GenerateAuthUrlResponse>;
authenticate(params: {code: string; codeVerifier: string; refresh?: string;}): Promise<AuthTokenDetails>;
refreshToken(refreshToken: string): Promise<AuthTokenDetails>;
post(token: string, info: MessageInformation): Promise<PostDetails>;
}
generateAuthUrl
— 此函數產生一個 URL,供使用者在平台(如 LinkedIn)上進行身份驗證。它為您提供了一個程式碼,您可以稍後將其轉換為令牌以發佈在使用者的時間軸上。
authenticate
- 取得使用者的程式碼,將其轉換為令牌,並在資料庫中建立使用者(並保存其令牌以及令牌到期日期)
refreshToken
- 取得使用者令牌和到期日期,並在需要時刷新它。
post
— 此函數會取得使用者令牌和訊息詳細訊息,並將它們發佈到使用者的時間軸(可以是圖片、文字、影片等)。
一旦完成,您必須在身份驗證請求中捕獲使用者的 POST 請求,將其對應到實現 IAuthenticator 的正確提供程序,並傳回generateAuthUrl.
generateAuthUrl
取得一個“返回 URL”,使用者完成身份驗證後將返回該 URL。在該 URL 中,您使用authenticate
功能。
大多數平台不會為您提供使用 API 安排貼文的方法。
即使他們這樣做了,也很難管理一些這樣做的人和一些不這樣做的人,所以最好將其視為那些不這樣做的人的平台。
為此,您需要實作一個隊列。
範例:在 Facebook 上發布:「我喜歡 Postiz」並在 1 週內處理。
您有多種隊列選項。
當您有大量工作時,它們是完美的,如果您有 PB 級的流資料, Kafka可能會提供幫助。
但就我而言,我不需要「真正的」隊列。
所以,我使用了Redis(Pub-sub)。您將一些金鑰推送到 Redis 中並加入到期日期。一旦到期日過去,它就會觸發 Redis 並發送通知(到某些服務)
有一家名為BullMQ的偉大公司,它簡化了 Redis 和您的應用程式的流程(它是免費且完全開源的)
下面是「工人」。它們是您的應用程式的微服務,用於在社交媒體上處理和發布“工作”。
它們是分開的,因為它們比主應用程式小,並且可能需要根據您的作業數量進行擴展。
我們稱之為“水平擴展”,因為隨著應用程式的成長,我們將需要加入更多工作人員。
通常,您需要在資料庫中保存具有多種狀態DRAFT,
SCHEDULED,
COMPLETED,
和ERROR
)的帖子,以便您可以追蹤它發生的情況。
就我而言,我使用Prisma 。
Prisma 是一種 ORM,它使用一對一、多對多和一對多等術語來包裝和查詢資料庫。
這是所有語言中都存在的已知方法。
我喜歡它,因為它保持一致的回應結構,並允許我將來更改為不同的資料庫(輕鬆遷移)。我的專案中甚至沒有一個原始查詢(好或壞)
我正在使用 PostgreSQL,因為它現在很流行(根據StackOverflow 調查)
使用 SQL 時要注意的主要問題是死鎖。您不想同時從多個位置更新一行,因為這會引發死鎖,更新將會失敗。
Postiz在 GitHub 上處於流行趨勢。它是100%免費的,我會盡力為您提供盡可能多的價值。
已經根據所有請求制定了一個小路線圖。
我希望你能幫助我一顆能幫助我的星星(好吧,我甚至無法描述有多少幫助)
{% cta https://github.com/gitroomhq/postiz-app %}明星 Postiz{% endcta %}
原文出處:https://dev.to/nevodavid/how-i-built-my-open-source-social-media-scheduling-tool-dih