create tweet returns tweet object

This commit is contained in:
Valentine 2024-07-09 02:30:38 +03:00
parent 064e3661c0
commit d55ecabeec
2 changed files with 45 additions and 20 deletions

View file

@ -13,10 +13,41 @@ type NewTweet struct {
Medias []*Media Medias []*Media
} }
func (s *Scraper) CreateTweet(tweet NewTweet) (string, error) { type newTweet struct {
Data struct {
CreateTweet struct {
TweetResults struct {
Result tweet `json:"result"`
} `json:"tweet_results"`
} `json:"create_tweet"`
} `json:"data"`
}
func (newTweet *newTweet) parse() *Tweet {
var tweet = &newTweet.Data.CreateTweet.TweetResults.Result
if tweet.NoteTweet.NoteTweetResults.Result.Text != "" {
tweet.Legacy.FullText = tweet.NoteTweet.NoteTweetResults.Result.Text
}
var legacy *legacyTweet = &tweet.Legacy
var user *legacyUser = &tweet.Core.UserResults.Result.Legacy
tw := parseLegacyTweet(user, legacy)
if tw == nil {
return nil
}
if tw.Views == 0 && tweet.Views.Count != "" {
tw.Views, _ = strconv.Atoi(tweet.Views.Count)
}
if tweet.QuotedStatusResult.Result != nil {
tw.QuotedStatus = tweet.QuotedStatusResult.Result.parse()
}
return tw
}
func (s *Scraper) CreateTweet(tweet NewTweet) (*Tweet, error) {
req, err := s.newRequest("POST", "https://twitter.com/i/api/graphql/oB-5XsHNAbjvARJEc8CZFw/CreateTweet") req, err := s.newRequest("POST", "https://twitter.com/i/api/graphql/oB-5XsHNAbjvARJEc8CZFw/CreateTweet")
if err != nil { if err != nil {
return "", err return nil, err
} }
req.Header.Set("content-type", "application/json") req.Header.Set("content-type", "application/json")
@ -76,28 +107,17 @@ func (s *Scraper) CreateTweet(tweet NewTweet) (string, error) {
b, _ := json.Marshal(body) b, _ := json.Marshal(body)
req.Body = io.NopCloser(bytes.NewReader(b)) req.Body = io.NopCloser(bytes.NewReader(b))
var response struct { var response newTweet
Data struct {
CreateTweet struct {
TweetResults struct {
Result struct {
RestID string `json:"rest_id"`
} `json:"result"`
} `json:"tweet_results"`
} `json:"create_tweet"`
} `json:"data"`
}
err = s.RequestAPI(req, &response) err = s.RequestAPI(req, &response)
if err != nil { if err != nil {
return "", err return nil, err
} }
if response.Data.CreateTweet.TweetResults.Result.RestID != "" { if result := response.parse(); result != nil {
return response.Data.CreateTweet.TweetResults.Result.RestID, nil return result, nil
} }
return "", errors.New("tweet wasn't post") return nil, errors.New("tweet wasn't post")
} }
func (s *Scraper) DeleteTweet(tweetId string) error { func (s *Scraper) DeleteTweet(tweetId string) error {

View file

@ -14,10 +14,15 @@ func TestCreateTweet(t *testing.T) {
} }
var err error var err error
testDeleteTweetId, err = testScraper.CreateTweet(twitterscraper.NewTweet{ var tweet *twitterscraper.Tweet
Text: "2", tweet, err = testScraper.CreateTweet(twitterscraper.NewTweet{
Text: "i love hollywood 🖤",
Medias: nil, Medias: nil,
}) })
if tweet != nil {
testDeleteTweetId = tweet.ID
}
if err != nil { if err != nil {
t.Error(err) t.Error(err)
} }