diff --git a/schedule.go b/schedule.go index aa7118a..550da14 100644 --- a/schedule.go +++ b/schedule.go @@ -1,6 +1,10 @@ package twitterscraper import ( + "bytes" + "encoding/json" + "errors" + "io" "net/url" "strings" "time" @@ -140,3 +144,42 @@ func (s *Scraper) FetchScheduledTweets() ([]*ScheduledTweet, error) { tweets := timeline.parseTweets() return tweets, nil } + +// DeleteScheduledTweet removes tweet from scheduled. +func (s *Scraper) DeleteScheduledTweet(id string) error { + req, err := s.newRequest("POST", "https://twitter.com/i/api/graphql/CTOVqej0JBXAZSwkp1US0g/DeleteScheduledTweet") + if err != nil { + return err + } + + req.Header.Set("content-type", "application/json") + + variables := map[string]interface{}{ + "scheduled_tweet_id": id, + } + + body := map[string]interface{}{ + "variables": variables, + "queryId": "CTOVqej0JBXAZSwkp1US0g", + } + + b, _ := json.Marshal(body) + req.Body = io.NopCloser(bytes.NewReader(b)) + + var response struct { + Data struct { + Status string `json:"scheduledtweet_delete"` + } `json:"data"` + } + + err = s.RequestAPI(req, &response) + if err != nil { + return err + } + + if response.Data.Status == "Done" { + return nil + } + + return errors.New("scheduled tweet wasn't removed") +} diff --git a/schedule_test.go b/schedule_test.go index 513fd01..5f9d28f 100644 --- a/schedule_test.go +++ b/schedule_test.go @@ -1,12 +1,23 @@ package twitterscraper_test import ( + "encoding/json" + "fmt" "testing" ) func TestFetchScheduledTweets(t *testing.T) { - _, err := testScraper.FetchScheduledTweets() + scheduled, err := testScraper.FetchScheduledTweets() if err != nil { t.Error(err) } + + b, _ := json.Marshal(scheduled) + fmt.Println(string(b)) +} + +func TestDeleteScheduledTweets(t *testing.T) { + if err := testScraper.DeleteScheduledTweet("1760827700724355072"); err != nil { + t.Error(err) + } }