summaryrefslogtreecommitdiff
path: root/internal/platforms/linkedin/linkedin.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/platforms/linkedin/linkedin.go')
-rw-r--r--internal/platforms/linkedin/linkedin.go61
1 files changed, 60 insertions, 1 deletions
diff --git a/internal/platforms/linkedin/linkedin.go b/internal/platforms/linkedin/linkedin.go
index 0f6ef2c..6205234 100644
--- a/internal/platforms/linkedin/linkedin.go
+++ b/internal/platforms/linkedin/linkedin.go
@@ -1,12 +1,71 @@
package linkedin
import (
+ "bytes"
"context"
+ "encoding/json"
+ "fmt"
+ "io"
+ "log"
+ "net/http"
+ "codeberg.org/snonux/gos/gosdir/db/platforms/linkedin/oauth2"
"codeberg.org/snonux/gos/internal/config"
"codeberg.org/snonux/gos/internal/entry"
)
+// TODO: Also implemebt a Text Platform output, which then laster can be
+// processed by Gemtexter as a page
func Post(ctx context.Context, args config.Args, ent entry.Entry) error {
- return oauth(args)
+ secrets, err := oauth2.AccessToken(args)
+ if err != err {
+ return err
+ }
+ // TODO: Don't log this anymore
+ log.Println("DEBUG", "Got access token", secrets)
+ return nil
+}
+
+func postMessage(secrets config.Secrets, message string) error {
+ const url = "https://api.linkedin.com/v2/posts"
+
+ post := map[string]interface{}{
+ "author": fmt.Sprintf("urn:li:person:%s", secrets.LinkedInPesonID),
+ "commentary": message,
+ "visibility": "PUBLIC",
+ "distribution": map[string]interface{}{
+ "feedDistribution": "MAIN_FEED",
+ "targetEntities": []string{},
+ "thirdPartyDistributionChannels": []string{},
+ },
+ "lifecycleState": "PUBLISHED",
+ "isReshareDisabledByAuthor": false,
+ }
+
+ payload, err := json.Marshal(post)
+ if err != nil {
+ return fmt.Errorf("Error encoding JSON:%w", err)
+ }
+
+ req, err := http.NewRequest("POST", url, bytes.NewBuffer(payload))
+ if err != nil {
+ return fmt.Errorf("Error creating request: %w", err)
+ }
+
+ req.Header.Add("Authorization", "Bearer "+secrets.LinkedInAccessToken)
+ req.Header.Set("Content-Type", "application/json")
+ req.Header.Add("X-RestLi-Protocol-Version", "2.0.0")
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+ if err != nil {
+ return fmt.Errorf("Error sending request: %w", err)
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode != http.StatusCreated {
+ body, _ := io.ReadAll(resp.Body)
+ return fmt.Errorf("Failed to post to LinkedIn. Status: %s\n%s\n\n", resp.Status, body)
+ }
+ return nil
}