Why twitter api request get Expecting value: line 1 column 1 (char 0)?
Question:
I got the below error when using a Twitter API request to change PFP:
'Expecting value: line 1 column 1 (char 0)'
And this for the Code
picture = [f for f in os.listdir("pfp/") if isfile(join("pfp/", f))]
random_picture = random.choice(picture)
with open(f'pfp/{random_picture}', "rb") as image_file:
encoded_string = base64.b64encode(image_file.read())
cookies = {
'auth_token': x
}
headers = {'Content-Type': 'multipart/form-data'}
params = f"image=data:image/png;base64,{(encoded_string.decode('utf-8'))}"
response = requests.post('https://api.twitter.com/1.1/account/update_profile_image.json',
cookies=cookies, params=params, headers=headers, proxies=proxies)
is the my code wrong ?
Any help is appreciated.
Answers:
Thing which you need to provide:
-
method: POST
-
url: https://api.twitter.com/1.1/account/update_profile_image.json
-
parameter as encoded url-safe Base64 (so for example +
should be changed to %20
) for example: iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAACXBIWXMAABwgAAAcIAHND5ueAAAAJklEQVQImWMQibsx73%20NSNyNGyIiDBAWhGSAs%20b9r2G4ISIC5wMAg%20IY55xszl4AAAAASUVORK5CYII%3D
-
header to authorise user: auth_token: 1610678221XXX-ab5sYYYYY
-
headers to authorise application (for OAuth 1.0 HMAC-SHA1)
Authorization headers – RFC 5849: The OAuth 1.0 Protocol
How to build it, check here:
https://www.rfc-editor.org/rfc/rfc5849#section-3.5.1
or here:
https://stackoverflow.com/a/67668940/5529263
For python you can use Requests-OAuthlib library
Example of code:
import requests
image = "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAACXBIWXMAABwgAAAcIAHND5ueAAAAJklEQVQImWMQibsx73%20NSNyNGyIiDBAWhGSAs%20b9r2G4ISIC5wMAg%20IY55xszl4AAAAASUVORK5CYII%3D"
url = "https://api.twitter.com/1.1/account/update_profile_image.json?image=" + image
headers = {
'auth_token': '12341234512345234512345-abcedfghijklm',
'Authorization': 'OAuth '
'oauth_consumer_key="ABCD1234ABCD1234ABCD1234",'
'oauth_signature_method="HMAC-SHA1",'
'oauth_timestamp="1234567890",'
'oauth_nonce="MNOPRST0987MN",'
'oauth_version="1.0",'
'oauth_signature="ABCDEFGHIJ1234ABCDEFGHIJ"',
}
response = requests.request("POST", url, headers=headers, data={})
print(response.text)
After sending correct request you can receive response with code 403
{
"errors": [
{
"message": "You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. You can learn more here: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-leve",
"code": 453
}
]
}
so it means you need to apply for Elevated
access, here you have more information:
https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-level
I got the below error when using a Twitter API request to change PFP:
'Expecting value: line 1 column 1 (char 0)'
And this for the Code
picture = [f for f in os.listdir("pfp/") if isfile(join("pfp/", f))]
random_picture = random.choice(picture)
with open(f'pfp/{random_picture}', "rb") as image_file:
encoded_string = base64.b64encode(image_file.read())
cookies = {
'auth_token': x
}
headers = {'Content-Type': 'multipart/form-data'}
params = f"image=data:image/png;base64,{(encoded_string.decode('utf-8'))}"
response = requests.post('https://api.twitter.com/1.1/account/update_profile_image.json',
cookies=cookies, params=params, headers=headers, proxies=proxies)
is the my code wrong ?
Any help is appreciated.
Thing which you need to provide:
-
method:
POST
-
url:
https://api.twitter.com/1.1/account/update_profile_image.json
-
parameter as encoded url-safe Base64 (so for example
+
should be changed to%20
) for example:iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAACXBIWXMAABwgAAAcIAHND5ueAAAAJklEQVQImWMQibsx73%20NSNyNGyIiDBAWhGSAs%20b9r2G4ISIC5wMAg%20IY55xszl4AAAAASUVORK5CYII%3D
-
header to authorise user:
auth_token: 1610678221XXX-ab5sYYYYY
-
headers to authorise application (for OAuth 1.0 HMAC-SHA1)
Authorization headers – RFC 5849: The OAuth 1.0 Protocol
How to build it, check here:
https://www.rfc-editor.org/rfc/rfc5849#section-3.5.1
or here:
https://stackoverflow.com/a/67668940/5529263
For python you can use Requests-OAuthlib library
Example of code:
import requests
image = "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAACXBIWXMAABwgAAAcIAHND5ueAAAAJklEQVQImWMQibsx73%20NSNyNGyIiDBAWhGSAs%20b9r2G4ISIC5wMAg%20IY55xszl4AAAAASUVORK5CYII%3D"
url = "https://api.twitter.com/1.1/account/update_profile_image.json?image=" + image
headers = {
'auth_token': '12341234512345234512345-abcedfghijklm',
'Authorization': 'OAuth '
'oauth_consumer_key="ABCD1234ABCD1234ABCD1234",'
'oauth_signature_method="HMAC-SHA1",'
'oauth_timestamp="1234567890",'
'oauth_nonce="MNOPRST0987MN",'
'oauth_version="1.0",'
'oauth_signature="ABCDEFGHIJ1234ABCDEFGHIJ"',
}
response = requests.request("POST", url, headers=headers, data={})
print(response.text)
After sending correct request you can receive response with code 403
{
"errors": [
{
"message": "You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. You can learn more here: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-leve",
"code": 453
}
]
}
so it means you need to apply for Elevated
access, here you have more information:
https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-level