129 lines
7.9 KiB
Go
129 lines
7.9 KiB
Go
package twitterscraper
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
type UserSettings struct {
|
|
Protected bool `json:"protected"`
|
|
ScreenName string `json:"screen_name"`
|
|
AlwaysUseHTTPS bool `json:"always_use_https"`
|
|
UseCookiePersonalization bool `json:"use_cookie_personalization"`
|
|
SleepTime interface{} `json:"sleep_time"`
|
|
GeoEnabled bool `json:"geo_enabled"`
|
|
Language string `json:"language"`
|
|
DiscoverableByEmail bool `json:"discoverable_by_email"`
|
|
DiscoverableByMobilePhone bool `json:"discoverable_by_mobile_phone"`
|
|
DisplaySensitiveMedia bool `json:"display_sensitive_media"`
|
|
PersonalizedTrends bool `json:"personalized_trends"`
|
|
AllowMediaTagging string `json:"allow_media_tagging"`
|
|
AllowContributorRequest string `json:"allow_contributor_request"`
|
|
AllowAdsPersonalization bool `json:"allow_ads_personalization"`
|
|
AllowLoggedOutDevicePersonalization bool `json:"allow_logged_out_device_personalization"`
|
|
AllowLocationHistoryPersonalization bool `json:"allow_location_history_personalization"`
|
|
AllowSharingDataForThirdPartyPersonalization bool `json:"allow_sharing_data_for_third_party_personalization"`
|
|
AllowDMsFrom string `json:"allow_dms_from"`
|
|
AlwaysAllowDMsFromSubscribers interface{} `json:"always_allow_dms_from_subscribers"`
|
|
AllowDMGroupsFrom string `json:"allow_dm_groups_from"`
|
|
TranslatorType string `json:"translator_type"`
|
|
CountryCode string `json:"country_code"`
|
|
NsfwUser bool `json:"nsfw_user"`
|
|
NsfwAdmin bool `json:"nsfw_admin"`
|
|
RankedTimelineSetting interface{} `json:"ranked_timeline_setting"`
|
|
RankedTimelineEligible interface{} `json:"ranked_timeline_eligible"`
|
|
AddressBookLiveSyncEnabled bool `json:"address_book_live_sync_enabled"`
|
|
UniversalQualityFilteringEnabled string `json:"universal_quality_filtering_enabled"`
|
|
DMReceiptSetting string `json:"dm_receipt_setting"`
|
|
AltTextComposeEnabled interface{} `json:"alt_text_compose_enabled"`
|
|
MentionFilter string `json:"mention_filter"`
|
|
AllowAuthenticatedPeriscopeRequests bool `json:"allow_authenticated_periscope_requests"`
|
|
ProtectPasswordReset bool `json:"protect_password_reset"`
|
|
RequirePasswordLogin bool `json:"require_password_login"`
|
|
RequiresLoginVerification bool `json:"requires_login_verification"`
|
|
ExtSharingAudioSpacesListeningDataWithFollowers bool `json:"ext_sharing_audiospaces_listening_data_with_followers"`
|
|
Ext interface{} `json:"ext"`
|
|
DMQualityFilter string `json:"dm_quality_filter"`
|
|
AutoplayDisabled bool `json:"autoplay_disabled"`
|
|
SettingsMetadata struct{} `json:"settings_metadata"` // Empty struct since the original value is an empty object
|
|
}
|
|
|
|
// parseUserSettings parses the JSON response into the UserSettings struct.
|
|
func parseUserSettings(jsn map[string]interface{}) UserSettings {
|
|
return UserSettings{
|
|
Protected: jsn["protected"].(bool),
|
|
ScreenName: jsn["screen_name"].(string),
|
|
AlwaysUseHTTPS: jsn["always_use_https"].(bool),
|
|
UseCookiePersonalization: jsn["use_cookie_personalization"].(bool),
|
|
SleepTime: jsn["sleep_time"],
|
|
GeoEnabled: jsn["geo_enabled"].(bool),
|
|
Language: jsn["language"].(string),
|
|
DiscoverableByEmail: jsn["discoverable_by_email"].(bool),
|
|
DiscoverableByMobilePhone: jsn["discoverable_by_mobile_phone"].(bool),
|
|
DisplaySensitiveMedia: jsn["display_sensitive_media"].(bool),
|
|
PersonalizedTrends: jsn["personalized_trends"].(bool),
|
|
AllowMediaTagging: jsn["allow_media_tagging"].(string),
|
|
AllowContributorRequest: jsn["allow_contributor_request"].(string),
|
|
AllowAdsPersonalization: jsn["allow_ads_personalization"].(bool),
|
|
AllowLoggedOutDevicePersonalization: jsn["allow_logged_out_device_personalization"].(bool),
|
|
AllowLocationHistoryPersonalization: jsn["allow_location_history_personalization"].(bool),
|
|
AllowSharingDataForThirdPartyPersonalization: jsn["allow_sharing_data_for_third_party_personalization"].(bool),
|
|
AllowDMsFrom: jsn["allow_dms_from"].(string),
|
|
AlwaysAllowDMsFromSubscribers: jsn["always_allow_dms_from_subscribers"],
|
|
AllowDMGroupsFrom: jsn["allow_dm_groups_from"].(string),
|
|
TranslatorType: jsn["translator_type"].(string),
|
|
CountryCode: jsn["country_code"].(string),
|
|
NsfwUser: jsn["nsfw_user"].(bool),
|
|
NsfwAdmin: jsn["nsfw_admin"].(bool),
|
|
RankedTimelineSetting: jsn["ranked_timeline_setting"],
|
|
RankedTimelineEligible: jsn["ranked_timeline_eligible"],
|
|
AddressBookLiveSyncEnabled: jsn["address_book_live_sync_enabled"].(bool),
|
|
UniversalQualityFilteringEnabled: jsn["universal_quality_filtering_enabled"].(string),
|
|
DMReceiptSetting: jsn["dm_receipt_setting"].(string),
|
|
AltTextComposeEnabled: jsn["alt_text_compose_enabled"],
|
|
MentionFilter: jsn["mention_filter"].(string),
|
|
AllowAuthenticatedPeriscopeRequests: jsn["allow_authenticated_periscope_requests"].(bool),
|
|
ProtectPasswordReset: jsn["protect_password_reset"].(bool),
|
|
RequirePasswordLogin: jsn["require_password_login"].(bool),
|
|
RequiresLoginVerification: jsn["requires_login_verification"].(bool),
|
|
ExtSharingAudioSpacesListeningDataWithFollowers: jsn["ext_sharing_audiospaces_listening_data_with_followers"].(bool),
|
|
Ext: jsn["ext"],
|
|
DMQualityFilter: jsn["dm_quality_filter"].(string),
|
|
AutoplayDisabled: jsn["autoplay_disabled"].(bool),
|
|
SettingsMetadata: struct{}{}, // Empty struct
|
|
}
|
|
}
|
|
|
|
// GetProfile return parsed user profile.
|
|
func (s *Scraper) GetUserSettings(authToken AuthToken) (UserSettings, error) {
|
|
var jsn map[string]interface{}
|
|
req, err := http.NewRequest("GET", "https://api.x.com/1.1/account/settings.json", nil)
|
|
|
|
if err != nil {
|
|
return UserSettings{}, err
|
|
}
|
|
|
|
query := url.Values{}
|
|
query.Set("include_ext_sharing_audiospaces_listening_data_with_followers", "true")
|
|
query.Set("include_mention_filter", "true")
|
|
query.Set("include_nsfw_user_flag", "true")
|
|
query.Set("include_nsfw_admin_flag", "true")
|
|
query.Set("include_ranked_timeline", "true")
|
|
query.Set("include_alt_text_compose", "true")
|
|
query.Set("ext", "ssoConnections")
|
|
query.Set("include_country_code", "true")
|
|
query.Set("include_ext_dm_nsfw_media_filter", "true")
|
|
req.URL.RawQuery = query.Encode()
|
|
|
|
req.Header.Set("Cookie", fmt.Sprintf("auth_token=%s; ct0=%s", authToken.Token, authToken.CSRFToken))
|
|
req.Header.Set("X-CSRF-Token", authToken.CSRFToken)
|
|
|
|
err = s.RequestAPI(req, &jsn)
|
|
|
|
if err != nil {
|
|
return UserSettings{}, err
|
|
}
|
|
|
|
return parseUserSettings(jsn), nil
|
|
}
|