robertoszek / pleroma-bot

Bot for mirroring one or multiple Twitter accounts in Pleroma/Mastodon/Misskey.
https://robertoszek.github.io/pleroma-bot
MIT License
104 stars 18 forks source link

Twitter v2 essential api errors #54

Closed Cknight70 closed 2 years ago

Cknight70 commented 2 years ago

Hi, I am just setting up this bot for the first time. When I run the bot it gives me an error

✖ 2021-12-10 15:11:38,072 - pleroma_bot - ERROR - Exception occurred (cli.py:423) 
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 303, in main
    for user_item in user_dict[:]:
TypeError: unhashable type: 'slice'

I have installed using pip3 on ubuntu 20.04 my config looks like this:

twitter_base_url: https://api.twitter.com/2
pleroma_base_url: https:///bae.st
max_tweets: 40
twitter_token: mytoken
users:
  pleroma_token: mytoken
  consumer_key: mykey
  consumer_secret: mysecret
  access_token_key: myaccess
  access_token_secret: myaccesssecret
  signature: false
  media_upload: true
  nitter: false
  rich_text: true
  visibility: "public"
  sensitive: true
  original_date: false
  original_date_format: "%Y/%m/%d %H:%"
  include_rts: true
  include_replies: false
  file_max_size: 500MB

Please let me know what I should do or how I can help.

robertoszek commented 2 years ago

Hi! It seems your "users" isn't a list, can try adding a hyphen like this?

[...]
max_tweets: 40
twitter_token: mytoken
users:
- pleroma_token: mytoken
  consumer_key: mykey
[...]

It's also missing the mapping "twitter_username", which as far as I know is mandatory https://robertoszek.github.io/pleroma-bot/gettingstarted/configuration/#minimal-configyml

Cknight70 commented 2 years ago

Thanks for your response. I had removed twitter_username because I got a different error which I assume is related to twitter's v2 api

I put my username which is my @ on twitter for the twitter_username field

I also added bio_text: "" to my config

ℹ 2021-12-10 15:49:50,388 - pleroma_bot - INFO - ====================================== 
ℹ 2021-12-10 15:49:50,388 - pleroma_bot - INFO - Processing user:       pleromausername 
✖ 2021-12-10 15:49:50,626 - pleroma_bot - ERROR - Exception occurred (cli.py:423) 
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 333, in main
    user = User(user_item, config, base_path)
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 185, in __init__
    self._get_twitter_info()
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/_twitter.py", line 30, in _get_twitter_info
    response.raise_for_status()
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/models.py", line 953, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.twitter.com/2/users/show.json?screen_name=twitterusername

so now my config looks like this

twitter_base_url: https://api.twitter.com/2
pleroma_base_url: https:///bae.st
max_tweets: 40
twitter_token: mytoken
users:
- twitter_username: twitterusername
  pleroma_username: pleromausername
  pleroma_token: mytoken
  consumer_key: mykey
  consumer_secret: mysecret
  access_token_key: myaccess
  access_token_secret: myaccesssecret
  signature: false
  media_upload: true
  nitter: false
  rich_text: true
  visibility: "public"
  sensitive: true
  original_date: false
  original_date_format: "%Y/%m/%d %H:%"
  include_rts: true
  include_replies: false
  file_max_size: 500MB
  bio_text: ""
robertoszek commented 2 years ago

Does it fail at the same point using

twitter_base_url: https://api.twitter.com/1.1

in the config?

Cknight70 commented 2 years ago

It fails in the same way

ℹ 2021-12-10 16:06:28,486 - pleroma_bot - INFO - ====================================== 
ℹ 2021-12-10 16:06:28,486 - pleroma_bot - INFO - Processing user:       pleromausername 
✖ 2021-12-10 16:06:28,692 - pleroma_bot - ERROR - Exception occurred (cli.py:423) 
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 333, in main
    user = User(user_item, config, base_path)
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 185, in __init__
    self._get_twitter_info()
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/_twitter.py", line 30, in _get_twitter_info
    response.raise_for_status()
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/models.py", line 953, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://api.twitter.com/1.1/users/show.json?screen_name=twitterusername
Cknight70 commented 2 years ago

In a similar way, 403 error instead of 400 error.

robertoszek commented 2 years ago

I assume the Twitter account you're trying to mirror has its tweets protected and that's why you're using these, right?

  consumer_key: mykey
  consumer_secret: mysecret
  access_token_key: myaccess
  access_token_secret: myaccesssecret

If that's the case, maybe running it on verbose mode can help us identify the issue with the authentication:

pleroma-bot -v

Cknight70 commented 2 years ago

Yes, its a private account.

With V2 api

DEBUG:root:Debug logging enabled

                        `^y6gB@@BBQA{,
                      :fB@@@@@@BBBBBQgU"
                    `f@@@@@@@@BBBBQgg80H~
                    H@@B@BB@BBBB#Qgg&0RNT
                   z@@&B@BBBBBBQgg80RD6HK
                  ;@@@QB@BBBB#Qgg&0RN6WqS
                  q@@@@@BBBBQgg80RN6HAqSo          _             _
                 z@@@@BBBB#Qg8&0RN6WqSUhr         | |           | |
               -H@@@@BBBBQQg80RD6HAqSKh(       ___| |_ ___  _ __| | __
              rB@@@BBBB#6Lm00DN6WqSUhfv       / __| __/ _ \| '__| |/ /
             f@@@@BBBBf= |0RD6HAqSKhfv        \__ \ || (_) | |  |   <
           =g@@@BBBBF=  "RDN6WqSUhff{         |___/\__\___/|_|  |_|\_|
          c@@@@BBgu_   ~WD9HAqSKhfkl`
        _6@@@BBNr     'qN6WqSUhhfXI'     .                           .       .
       rB@@@B0r      `S6HAqSKhfkoCr  ,-. |  ,-. ,-. ,-. ,-,-. ,-.    |-. ,-. |-
     `X@@@BQx       `I6WASShhfXFIy_  | | |  |-' |   | | | | | ,-| -- | | | | |
    _g@@@Q\`        JHAqSKhfXoCwJz_  |-' `' `-' '   `-' ' ' ' `-^    `-' `-' `'
   rB@@#x`         }WASShhfXsIyzuu,  |
 `y@@&|          .IAqSKhfXoCwJzu1lr  '
`D@&|           :KqSUhffXsIyzuu1llc,
ff=            `==:::""",,,,________

ℹ 2021-12-10 16:28:03,453 - pleroma_bot - INFO - ====================================== 
INFO:pleroma_bot:======================================
ℹ 2021-12-10 16:28:03,454 - pleroma_bot - INFO - Processing user:   pleromausername 
INFO:pleroma_bot:Processing user:   pleromausername
DEBUG:requests_oauthlib.oauth1_auth:Signing request <PreparedRequest [GET]> using client <Client client_key=myrealconsumerkey, client_secret=****, resource_owner_key=myrealaccesstokenkey, resource_owner_secret=****, signature_method=HMAC-SHA1, signature_type=AUTH_HEADER, callback_uri=None, rsa_key=None, verifier=None, realm=None, encoding=utf-8, decoding=utf-8, nonce=None, timestamp=None>
DEBUG:requests_oauthlib.oauth1_auth:Including body in call to sign: False
DEBUG:oauthlib.oauth1.rfc5849:Collected params: [('user.fields', 'pinned_tweet_id'), ('expansions', 'pinned_tweet_id'), ('tweet.fields', 'entities'), ('oauth_nonce', '15303381980758537871639178883'), ('oauth_timestamp', '1639178883'), ('oauth_version', '1.0'), ('oauth_signature_method', 'HMAC-SHA1'), ('oauth_consumer_key', 'myrealconsumerkey'), ('oauth_token', 'myrealaccesstokenkey')]
DEBUG:oauthlib.oauth1.rfc5849:Normalized params: expansions=pinned_tweet_id&oauth_consumer_key=myrealconsumerkey&oauth_nonce=15303381980758537871639178883&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1639178883&oauth_token=myrealaccesstokenkey&oauth_version=1.0&tweet.fields=entities&user.fields=pinned_tweet_id
DEBUG:oauthlib.oauth1.rfc5849:Normalized URI: https://api.twitter.com/2/users/by/username/twitterusername
DEBUG:oauthlib.oauth1.rfc5849:Signing: signature base string: GET&https%3A%2F%2Fapi.twitter.com%2F2%2Fusers%2Fby%2Fusername%2Ftwitterusername&expansions%3Dpinned_tweet_id%26oauth_consumer_key%3Dmyrealconsumerkey%26oauth_nonce%3D15303381980758537871639178883%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1639178883%26oauth_token%3Dmyrealaccesstokenkey%26oauth_version%3D1.0%26tweet.fields%3Dentities%26user.fields%3Dpinned_tweet_id
DEBUG:oauthlib.oauth1.rfc5849:Signature: +ozZfSrKL9msYI7AWm73BVBYZcg=
DEBUG:oauthlib.oauth1.rfc5849:Encoding URI, headers and body to utf-8.
DEBUG:requests_oauthlib.oauth1_auth:Updated url: https://api.twitter.com/2/users/by/username/twitterusername?user.fields=pinned_tweet_id&expansions=pinned_tweet_id&tweet.fields=entities
DEBUG:requests_oauthlib.oauth1_auth:Updated headers: {b'User-Agent': b'python-requests/2.26.0', b'Accept-Encoding': b'gzip, deflate', b'Accept': b'*/*', b'Connection': b'keep-alive', b'Authorization': b'OAuth oauth_nonce="15303381980758537871639178883", oauth_timestamp="1639178883", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="myrealconsumerkey", oauth_token="myrealaccesstokenkey", oauth_signature="%2BozZfSrKL9msYI7AWm73BVBYZcg%3D"'}
DEBUG:requests_oauthlib.oauth1_auth:Updated body: None
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.twitter.com:443
DEBUG:urllib3.connectionpool:https://api.twitter.com:443 "GET /2/users/by/username/twitterusername?user.fields=pinned_tweet_id&expansions=pinned_tweet_id&tweet.fields=entities HTTP/1.1" 200 111
DEBUG:requests_oauthlib.oauth1_auth:Signing request <PreparedRequest [GET]> using client <Client client_key=myrealconsumerkey, client_secret=****, resource_owner_key=myrealaccesstokenkey, resource_owner_secret=****, signature_method=HMAC-SHA1, signature_type=AUTH_HEADER, callback_uri=None, rsa_key=None, verifier=None, realm=None, encoding=utf-8, decoding=utf-8, nonce=None, timestamp=None>
DEBUG:requests_oauthlib.oauth1_auth:Including body in call to sign: False
DEBUG:oauthlib.oauth1.rfc5849:Collected params: [('screen_name', 'twitterusername'), ('oauth_nonce', '89805995954497329931639178883'), ('oauth_timestamp', '1639178883'), ('oauth_version', '1.0'), ('oauth_signature_method', 'HMAC-SHA1'), ('oauth_consumer_key', 'myrealconsumerkey'), ('oauth_token', 'myrealaccesstokenkey')]
DEBUG:oauthlib.oauth1.rfc5849:Normalized params: oauth_consumer_key=myrealconsumerkey&oauth_nonce=89805995954497329931639178883&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1639178883&oauth_token=myrealaccesstokenkey&oauth_version=1.0&screen_name=twitterusername
DEBUG:oauthlib.oauth1.rfc5849:Normalized URI: https://api.twitter.com/2/users/show.json
DEBUG:oauthlib.oauth1.rfc5849:Signing: signature base string: GET&https%3A%2F%2Fapi.twitter.com%2F2%2Fusers%2Fshow.json&oauth_consumer_key%3Dmyrealconsumerkey%26oauth_nonce%3D89805995954497329931639178883%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1639178883%26oauth_token%3Dmyrealaccesstokenkey%26oauth_version%3D1.0%26screen_name%3Dtwitterusername
DEBUG:oauthlib.oauth1.rfc5849:Signature: Kbkh3vRqXmdDNXrDfrKpvbq1M9k=
DEBUG:oauthlib.oauth1.rfc5849:Encoding URI, headers and body to utf-8.
DEBUG:requests_oauthlib.oauth1_auth:Updated url: https://api.twitter.com/2/users/show.json?screen_name=twitterusername
DEBUG:requests_oauthlib.oauth1_auth:Updated headers: {b'User-Agent': b'python-requests/2.26.0', b'Accept-Encoding': b'gzip, deflate', b'Accept': b'*/*', b'Connection': b'keep-alive', b'Authorization': b'OAuth oauth_nonce="89805995954497329931639178883", oauth_timestamp="1639178883", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="myrealconsumerkey", oauth_token="myrealaccesstokenkey", oauth_signature="Kbkh3vRqXmdDNXrDfrKpvbq1M9k%3D"'}
DEBUG:requests_oauthlib.oauth1_auth:Updated body: None
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.twitter.com:443
DEBUG:urllib3.connectionpool:https://api.twitter.com:443 "GET /2/users/show.json?screen_name=twitterusername HTTP/1.1" 400 263
✖ 2021-12-10 16:28:03,723 - pleroma_bot - ERROR - Exception occurred (cli.py:423) 
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 333, in main
    user = User(user_item, config, base_path)
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 185, in __init__
    self._get_twitter_info()
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/_twitter.py", line 30, in _get_twitter_info
    response.raise_for_status()
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/models.py", line 953, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.twitter.com/2/users/show.json?screen_name=twitterusername
ERROR:pleroma_bot:Exception occurred
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 333, in main
    user = User(user_item, config, base_path)
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 185, in __init__
    self._get_twitter_info()
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/_twitter.py", line 30, in _get_twitter_info
    response.raise_for_status()
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/models.py", line 953, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.twitter.com/2/users/show.json?screen_name=twitterusername

With V1.1

DEBUG:root:Debug logging enabled

                        `^y6gB@@BBQA{,
                      :fB@@@@@@BBBBBQgU"
                    `f@@@@@@@@BBBBQgg80H~
                    H@@B@BB@BBBB#Qgg&0RNT
                   z@@&B@BBBBBBQgg80RD6HK
                  ;@@@QB@BBBB#Qgg&0RN6WqS
                  q@@@@@BBBBQgg80RN6HAqSo          _             _
                 z@@@@BBBB#Qg8&0RN6WqSUhr         | |           | |
               -H@@@@BBBBQQg80RD6HAqSKh(       ___| |_ ___  _ __| | __
              rB@@@BBBB#6Lm00DN6WqSUhfv       / __| __/ _ \| '__| |/ /
             f@@@@BBBBf= |0RD6HAqSKhfv        \__ \ || (_) | |  |   <
           =g@@@BBBBF=  "RDN6WqSUhff{         |___/\__\___/|_|  |_|\_|
          c@@@@BBgu_   ~WD9HAqSKhfkl`
        _6@@@BBNr     'qN6WqSUhhfXI'     .                           .       .
       rB@@@B0r      `S6HAqSKhfkoCr  ,-. |  ,-. ,-. ,-. ,-,-. ,-.    |-. ,-. |-
     `X@@@BQx       `I6WASShhfXFIy_  | | |  |-' |   | | | | | ,-| -- | | | | |
    _g@@@Q\`        JHAqSKhfXoCwJz_  |-' `' `-' '   `-' ' ' ' `-^    `-' `-' `'
   rB@@#x`         }WASShhfXsIyzuu,  |
 `y@@&|          .IAqSKhfXoCwJzu1lr  '
`D@&|           :KqSUhffXsIyzuu1llc,
ff=            `==:::""",,,,________

ℹ 2021-12-10 16:35:22,110 - pleroma_bot - INFO - ====================================== 
INFO:pleroma_bot:======================================
ℹ 2021-12-10 16:35:22,110 - pleroma_bot - INFO - Processing user:   pleromausername 
INFO:pleroma_bot:Processing user:   pleromausername
DEBUG:requests_oauthlib.oauth1_auth:Signing request <PreparedRequest [GET]> using client <Client client_key=myrealconsumerkey, client_secret=****, resource_owner_key=myrealaccesstokenkey, resource_owner_secret=****, signature_method=HMAC-SHA1, signature_type=AUTH_HEADER, callback_uri=None, rsa_key=None, verifier=None, realm=None, encoding=utf-8, decoding=utf-8, nonce=None, timestamp=None>
DEBUG:requests_oauthlib.oauth1_auth:Including body in call to sign: False
DEBUG:oauthlib.oauth1.rfc5849:Collected params: [('user.fields', 'pinned_tweet_id'), ('expansions', 'pinned_tweet_id'), ('tweet.fields', 'entities'), ('oauth_nonce', '182201741117129163301639179322'), ('oauth_timestamp', '1639179322'), ('oauth_version', '1.0'), ('oauth_signature_method', 'HMAC-SHA1'), ('oauth_consumer_key', 'myrealconsumerkey'), ('oauth_token', 'myrealaccesstokenkey')]
DEBUG:oauthlib.oauth1.rfc5849:Normalized params: expansions=pinned_tweet_id&oauth_consumer_key=myrealconsumerkey&oauth_nonce=182201741117129163301639179322&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1639179322&oauth_token=myrealaccesstokenkey&oauth_version=1.0&tweet.fields=entities&user.fields=pinned_tweet_id
DEBUG:oauthlib.oauth1.rfc5849:Normalized URI: https://api.twitter.com/2/users/by/username/twitterusername
DEBUG:oauthlib.oauth1.rfc5849:Signing: signature base string: GET&https%3A%2F%2Fapi.twitter.com%2F2%2Fusers%2Fby%2Fusername%2Ftwitterusername&expansions%3Dpinned_tweet_id%26oauth_consumer_key%3Dmyrealconsumerkey%26oauth_nonce%3D182201741117129163301639179322%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1639179322%26oauth_token%3Dmyrealaccesstokenkey%26oauth_version%3D1.0%26tweet.fields%3Dentities%26user.fields%3Dpinned_tweet_id
DEBUG:oauthlib.oauth1.rfc5849:Signature: z+ZCrpqmlcTjrOipFHIN41GbjKo=
DEBUG:oauthlib.oauth1.rfc5849:Encoding URI, headers and body to utf-8.
DEBUG:requests_oauthlib.oauth1_auth:Updated url: https://api.twitter.com/2/users/by/username/twitterusername?user.fields=pinned_tweet_id&expansions=pinned_tweet_id&tweet.fields=entities
DEBUG:requests_oauthlib.oauth1_auth:Updated headers: {b'User-Agent': b'python-requests/2.26.0', b'Accept-Encoding': b'gzip, deflate', b'Accept': b'*/*', b'Connection': b'keep-alive', b'Authorization': b'OAuth oauth_nonce="182201741117129163301639179322", oauth_timestamp="1639179322", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="myrealconsumerkey", oauth_token="myrealaccesstokenkey", oauth_signature="z%2BZCrpqmlcTjrOipFHIN41GbjKo%3D"'}
DEBUG:requests_oauthlib.oauth1_auth:Updated body: None
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.twitter.com:443
DEBUG:urllib3.connectionpool:https://api.twitter.com:443 "GET /2/users/by/username/twitterusername?user.fields=pinned_tweet_id&expansions=pinned_tweet_id&tweet.fields=entities HTTP/1.1" 200 111
DEBUG:requests_oauthlib.oauth1_auth:Signing request <PreparedRequest [GET]> using client <Client client_key=myrealconsumerkey, client_secret=****, resource_owner_key=myrealaccesstokenkey, resource_owner_secret=****, signature_method=HMAC-SHA1, signature_type=AUTH_HEADER, callback_uri=None, rsa_key=None, verifier=None, realm=None, encoding=utf-8, decoding=utf-8, nonce=None, timestamp=None>
DEBUG:requests_oauthlib.oauth1_auth:Including body in call to sign: False
DEBUG:oauthlib.oauth1.rfc5849:Collected params: [('screen_name', 'twitterusername'), ('oauth_nonce', '168735197166574174741639179322'), ('oauth_timestamp', '1639179322'), ('oauth_version', '1.0'), ('oauth_signature_method', 'HMAC-SHA1'), ('oauth_consumer_key', 'myrealconsumerkey'), ('oauth_token', 'myrealaccesstokenkey')]
DEBUG:oauthlib.oauth1.rfc5849:Normalized params: oauth_consumer_key=myrealconsumerkey&oauth_nonce=168735197166574174741639179322&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1639179322&oauth_token=myrealaccesstokenkey&oauth_version=1.0&screen_name=twitterusername
DEBUG:oauthlib.oauth1.rfc5849:Normalized URI: https://api.twitter.com/1.1/users/show.json
DEBUG:oauthlib.oauth1.rfc5849:Signing: signature base string: GET&https%3A%2F%2Fapi.twitter.com%2F1.1%2Fusers%2Fshow.json&oauth_consumer_key%3Dmyrealconsumerkey%26oauth_nonce%3D168735197166574174741639179322%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1639179322%26oauth_token%3Dmyrealaccesstokenkey%26oauth_version%3D1.0%26screen_name%3Dtwitterusername
DEBUG:oauthlib.oauth1.rfc5849:Signature: t0LRVCxQN9FIGIWaCqeaNiHaV2E=
DEBUG:oauthlib.oauth1.rfc5849:Encoding URI, headers and body to utf-8.
DEBUG:requests_oauthlib.oauth1_auth:Updated url: https://api.twitter.com/1.1/users/show.json?screen_name=twitterusername
DEBUG:requests_oauthlib.oauth1_auth:Updated headers: {b'User-Agent': b'python-requests/2.26.0', b'Accept-Encoding': b'gzip, deflate', b'Accept': b'*/*', b'Connection': b'keep-alive', b'Authorization': b'OAuth oauth_nonce="168735197166574174741639179322", oauth_timestamp="1639179322", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="myrealconsumerkey", oauth_token="myrealaccesstokenkey", oauth_signature="t0LRVCxQN9FIGIWaCqeaNiHaV2E%3D"'}
DEBUG:requests_oauthlib.oauth1_auth:Updated body: None
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.twitter.com:443
DEBUG:urllib3.connectionpool:https://api.twitter.com:443 "GET /1.1/users/show.json?screen_name=twitterusername HTTP/1.1" 403 270
✖ 2021-12-10 16:35:22,340 - pleroma_bot - ERROR - Exception occurred (cli.py:423) 
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 333, in main
    user = User(user_item, config, base_path)
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 185, in __init__
    self._get_twitter_info()
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/_twitter.py", line 30, in _get_twitter_info
    response.raise_for_status()
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/models.py", line 953, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://api.twitter.com/1.1/users/show.json?screen_name=twitterusername
ERROR:pleroma_bot:Exception occurred
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 333, in main
    user = User(user_item, config, base_path)
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 185, in __init__
    self._get_twitter_info()
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/_twitter.py", line 30, in _get_twitter_info
    response.raise_for_status()
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/models.py", line 953, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://api.twitter.com/1.1/users/show.json?screen_name=twitterusername
robertoszek commented 2 years ago

Something's up with the keys and tokens Did you generate those tokens using a Twitter's API v2 project? https://github.com/robertoszek/pleroma-bot/issues/18#issuecomment-748087612

The process for verifying the credentials it's a bit involved https://developer.twitter.com/en/docs/authentication/oauth-1-0a/authorizing-a-request

These are the lengths of each one if it's any help:

   consumer_key: XXXXXXXXXXXXXXXXXXXXXXXXX # Consumer API key
   consumer_secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # Consumer API Key Secret
   access_token_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # Access Token
   access_token_secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # Access Token Secret
robertoszek commented 2 years ago

Oh I forgot to ask, does your Twitter's API project has elevated access? https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-level

We leverage endpoints from v1.1 and v2 for some that were not yet fully functional at the time of implementation (like downloading videos, which falls back to v1.1), until we migrate everything to v2 in the near future, we need access to both v1.1 and v2.

(And the fallback API value should be this one, we primarily use v2 internally but fallback to v1.1 sometimes)

twitter_base_url: https://api.twitter.com/1.1
Cknight70 commented 2 years ago

I got the keys and tokens today, so I assume they are v2 keys.

ahh no I just have essential, so this would make sense why I'm having issues. I'll request elevated access and report back when they give it to me.

robertoszek commented 2 years ago

It's a fairly recent development (15 November 2021): https://blog.twitter.com/developer/en_us/topics/tools/2021/build-whats-next-with-the-new-twitter-developer-platform

If you’re already using the Twitter API v2, you’ll automatically see your Projects upgraded to Elevated access today.

You barely missed the automatic upgrade, as you said, I think you need to apply for elevated as of now https://developer.twitter.com/en/portal/products/elevated

Cknight70 commented 2 years ago

Yeah the process to get elevated is the same as getting regular api access for 1.1. It was fairly simple. using twitter_base_url: https://api.twitter.com/1.1 in the config file, I get this new error

DEBUG:root:Debug logging enabled

                        `^y6gB@@BBQA{,
                      :fB@@@@@@BBBBBQgU"
                    `f@@@@@@@@BBBBQgg80H~
                    H@@B@BB@BBBB#Qgg&0RNT
                   z@@&B@BBBBBBQgg80RD6HK
                  ;@@@QB@BBBB#Qgg&0RN6WqS
                  q@@@@@BBBBQgg80RN6HAqSo          _             _
                 z@@@@BBBB#Qg8&0RN6WqSUhr         | |           | |
               -H@@@@BBBBQQg80RD6HAqSKh(       ___| |_ ___  _ __| | __
              rB@@@BBBB#6Lm00DN6WqSUhfv       / __| __/ _ \| '__| |/ /
             f@@@@BBBBf= |0RD6HAqSKhfv        \__ \ || (_) | |  |   <
           =g@@@BBBBF=  "RDN6WqSUhff{         |___/\__\___/|_|  |_|\_|
          c@@@@BBgu_   ~WD9HAqSKhfkl`
        _6@@@BBNr     'qN6WqSUhhfXI'     .                           .       .
       rB@@@B0r      `S6HAqSKhfkoCr  ,-. |  ,-. ,-. ,-. ,-,-. ,-.    |-. ,-. |-
     `X@@@BQx       `I6WASShhfXFIy_  | | |  |-' |   | | | | | ,-| -- | | | | |
    _g@@@Q\`        JHAqSKhfXoCwJz_  |-' `' `-' '   `-' ' ' ' `-^    `-' `-' `'
   rB@@#x`         }WASShhfXsIyzuu,  |
 `y@@&|          .IAqSKhfXoCwJzu1lr  '
`D@&|           :KqSUhffXsIyzuu1llc,
ff=            `==:::""",,,,________

ℹ 2021-12-10 17:34:59,410 - pleroma_bot - INFO - ====================================== 
INFO:pleroma_bot:======================================
ℹ 2021-12-10 17:34:59,410 - pleroma_bot - INFO - Processing user:   myrealpleromaname 
INFO:pleroma_bot:Processing user:   myrealpleromaname
DEBUG:requests_oauthlib.oauth1_auth:Signing request <PreparedRequest [GET]> using client <Client client_key=myrealconsumer_key, client_secret=****, resource_owner_key=myrealaccess_token_key, resource_owner_secret=****, signature_method=HMAC-SHA1, signature_type=AUTH_HEADER, callback_uri=None, rsa_key=None, verifier=None, realm=None, encoding=utf-8, decoding=utf-8, nonce=None, timestamp=None>
DEBUG:requests_oauthlib.oauth1_auth:Including body in call to sign: False
DEBUG:oauthlib.oauth1.rfc5849:Collected params: [('user.fields', 'pinned_tweet_id'), ('expansions', 'pinned_tweet_id'), ('tweet.fields', 'entities'), ('oauth_nonce', '176277577907894377151639182899'), ('oauth_timestamp', '1639182899'), ('oauth_version', '1.0'), ('oauth_signature_method', 'HMAC-SHA1'), ('oauth_consumer_key', 'myrealconsumer_key'), ('oauth_token', 'myrealaccess_token_key')]
DEBUG:oauthlib.oauth1.rfc5849:Normalized params: expansions=pinned_tweet_id&oauth_consumer_key=myrealconsumer_key&oauth_nonce=176277577907894377151639182899&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1639182899&oauth_token=myrealaccess_token_key&oauth_version=1.0&tweet.fields=entities&user.fields=pinned_tweet_id
DEBUG:oauthlib.oauth1.rfc5849:Normalized URI: https://api.twitter.com/2/users/by/username/myrealtwittername
DEBUG:oauthlib.oauth1.rfc5849:Signing: signature base string: GET&https%3A%2F%2Fapi.twitter.com%2F2%2Fusers%2Fby%2Fusername%2Fmyrealtwittername&expansions%3Dpinned_tweet_id%26oauth_consumer_key%3Dmyrealconsumer_key%26oauth_nonce%3D176277577907894377151639182899%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1639182899%26oauth_token%3Dmyrealaccess_token_key%26oauth_version%3D1.0%26tweet.fields%3Dentities%26user.fields%3Dpinned_tweet_id
DEBUG:oauthlib.oauth1.rfc5849:Signature: pwwZl2d+6Cqga2EhoHw0FeBY0mI=
DEBUG:oauthlib.oauth1.rfc5849:Encoding URI, headers and body to utf-8.
DEBUG:requests_oauthlib.oauth1_auth:Updated url: https://api.twitter.com/2/users/by/username/myrealtwittername?user.fields=pinned_tweet_id&expansions=pinned_tweet_id&tweet.fields=entities
DEBUG:requests_oauthlib.oauth1_auth:Updated headers: {b'User-Agent': b'python-requests/2.26.0', b'Accept-Encoding': b'gzip, deflate', b'Accept': b'*/*', b'Connection': b'keep-alive', b'Authorization': b'OAuth oauth_nonce="176277577907894377151639182899", oauth_timestamp="1639182899", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="myrealconsumer_key", oauth_token="myrealaccess_token_key", oauth_signature="pwwZl2d%2B6Cqga2EhoHw0FeBY0mI%3D"'}
DEBUG:requests_oauthlib.oauth1_auth:Updated body: None
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.twitter.com:443
DEBUG:urllib3.connectionpool:https://api.twitter.com:443 "GET /2/users/by/username/myrealtwittername?user.fields=pinned_tweet_id&expansions=pinned_tweet_id&tweet.fields=entities HTTP/1.1" 200 111
DEBUG:requests_oauthlib.oauth1_auth:Signing request <PreparedRequest [GET]> using client <Client client_key=myrealconsumer_key, client_secret=****, resource_owner_key=myrealaccess_token_key, resource_owner_secret=****, signature_method=HMAC-SHA1, signature_type=AUTH_HEADER, callback_uri=None, rsa_key=None, verifier=None, realm=None, encoding=utf-8, decoding=utf-8, nonce=None, timestamp=None>
DEBUG:requests_oauthlib.oauth1_auth:Including body in call to sign: False
DEBUG:oauthlib.oauth1.rfc5849:Collected params: [('screen_name', 'myrealtwittername'), ('oauth_nonce', '116082159101334391781639182899'), ('oauth_timestamp', '1639182899'), ('oauth_version', '1.0'), ('oauth_signature_method', 'HMAC-SHA1'), ('oauth_consumer_key', 'myrealconsumer_key'), ('oauth_token', 'myrealaccess_token_key')]
DEBUG:oauthlib.oauth1.rfc5849:Normalized params: oauth_consumer_key=myrealconsumer_key&oauth_nonce=116082159101334391781639182899&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1639182899&oauth_token=myrealaccess_token_key&oauth_version=1.0&screen_name=myrealtwittername
DEBUG:oauthlib.oauth1.rfc5849:Normalized URI: https://api.twitter.com/1.1/users/show.json
DEBUG:oauthlib.oauth1.rfc5849:Signing: signature base string: GET&https%3A%2F%2Fapi.twitter.com%2F1.1%2Fusers%2Fshow.json&oauth_consumer_key%3Dmyrealconsumer_key%26oauth_nonce%3D116082159101334391781639182899%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1639182899%26oauth_token%3Dmyrealaccess_token_key%26oauth_version%3D1.0%26screen_name%3Dmyrealtwittername
DEBUG:oauthlib.oauth1.rfc5849:Signature: 5mTfyCYbMLEWiSREZUE3EkyTN2g=
DEBUG:oauthlib.oauth1.rfc5849:Encoding URI, headers and body to utf-8.
DEBUG:requests_oauthlib.oauth1_auth:Updated url: https://api.twitter.com/1.1/users/show.json?screen_name=myrealtwittername
DEBUG:requests_oauthlib.oauth1_auth:Updated headers: {b'User-Agent': b'python-requests/2.26.0', b'Accept-Encoding': b'gzip, deflate', b'Accept': b'*/*', b'Connection': b'keep-alive', b'Authorization': b'OAuth oauth_nonce="116082159101334391781639182899", oauth_timestamp="1639182899", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="myrealconsumer_key", oauth_token="myrealaccess_token_key", oauth_signature="5mTfyCYbMLEWiSREZUE3EkyTN2g%3D"'}
DEBUG:requests_oauthlib.oauth1_auth:Updated body: None
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.twitter.com:443
DEBUG:urllib3.connectionpool:https://api.twitter.com:443 "GET /1.1/users/show.json?screen_name=myrealtwittername HTTP/1.1" 200 1514
✖ 2021-12-10 17:34:59,679 - pleroma_bot - ERROR - Exception occurred (cli.py:423) 
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 333, in main
    user = User(user_item, config, base_path)
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 186, in __init__
    self._get_instance_info()
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/_utils.py", line 229, in _get_instance_info
    response = requests.get(instance_url)
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/sessions.py", line 528, in request
    prep = self.prepare_request(req)
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/sessions.py", line 456, in prepare_request
    p.prepare(
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/models.py", line 316, in prepare
    self.prepare_url(url, params)
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/models.py", line 393, in prepare_url
    raise InvalidURL("Invalid URL %r: No host supplied" % url)
requests.exceptions.InvalidURL: Invalid URL 'https:///bae.st/api/v1/instance': No host supplied
ERROR:pleroma_bot:Exception occurred
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 333, in main
    user = User(user_item, config, base_path)
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/cli.py", line 186, in __init__
    self._get_instance_info()
  File "/usr/local/lib/python3.8/dist-packages/pleroma_bot/_utils.py", line 229, in _get_instance_info
    response = requests.get(instance_url)
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/sessions.py", line 528, in request
    prep = self.prepare_request(req)
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/sessions.py", line 456, in prepare_request
    p.prepare(
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/models.py", line 316, in prepare
    self.prepare_url(url, params)
  File "/usr/local/lib/python3.8/dist-packages/requests-2.26.0-py3.8.egg/requests/models.py", line 393, in prepare_url
    raise InvalidURL("Invalid URL %r: No host supplied" % url)
requests.exceptions.InvalidURL: Invalid URL 'https:///bae.st/api/v1/instance': No host supplied

If you think this is an instance issue, I can talk to the admin of the server

Cknight70 commented 2 years ago

I also got new api keys and tokens forgot to mention

robertoszek commented 2 years ago

Perfect, keep me posted once you get the approval for Elevated and try it again

And, even if that was in the end why it wasn't working for you, in the meantime I created an issue to keep track of the last steps of migration to v2 (so that essential access should be enough)

55

Cknight70 commented 2 years ago

That new error is with the new elevated keys and tokens if you wouldn't mind looking at it

robertoszek commented 2 years ago

Oh, and regarding the instance issue, could you try replacing this value on your config pleroma_base_url: https:///bae.st for pleroma_base_url: https://bae.st

Cknight70 commented 2 years ago

I'm not sure how that happened but good catch! I appreciate your help & It seems to be working as intended now :)

robertoszek commented 2 years ago

No problem!

Feel free to open a new issue if you encounter any other errors!