Search code examples
jsonpython-3.xsttwitterapi

Encoding works for 1 and not for other list in Twitter using python


I am trying to start cheating data from twitter using twitter module and python. Here's is my code

import twitter

import win_unicode_console
win_unicode_console.enable()


CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxx'
OAUTH_TOKEN = 'xxxxxxxxxxxxxxxxx'
OAUTH_TOKEN_SECRET = 'xxxxxxxxxxxx'

auth = twitter.oauth.OAuth(OAUTH_TOKEN, OAUTH_TOKEN_SECRET,
                       CONSUMER_KEY, CONSUMER_SECRET)
twitter_api = twitter.Twitter(auth=auth)

print(twitter_api)

WORLD_WOE_ID = 1
US_WOE_ID = 23424977

world_trends = twitter_api.trends.place(_id=WORLD_WOE_ID)
us_trends = twitter_api.trends.place(_id=US_WOE_ID)

print(us_trends)
print(world_trends)

I was getting encoding error . so i used

print((us_trends).encode('utf-8'))

which resulted in

AttributeError: 'TwitterListResponse' object has no attribute 'encode'

so i decided to use win_unicode_console module

But whats confusing is that us_trends is returning value.

[{'trends': [{'name': 'El Chapo', 'url': 'http://twitter.com/search?q=%22El+Chapo%22', 'promoted_content': None, 'query': '%22El+Chapo%22', 'tweet_volume': 103536}, {'name': 'Antonio Brown', 'url': 'http://twitter.com/search?q=%22Antonio+Brown%22', 'promoted_

but the statement

print(world_trends)

gives below error

File "C:\Users\nawendu\Desktop\TWIT.PY", line 25, in <module>
print(world_trends)
File 
line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 24- 
29: character maps to <undefined>

How can the encoding work in us trends and not in world trends??


Solution

  • encode is a method of a string.

    You have a json object, it doesn't have this method.

    When you print an object it needs to convert the object to a string representation for your output encoding (probably windows encoding here). If there are characters in there (e.g. Emoji) that are not in the output encoding then you get an error.

    Encodings are a difficult topic (and a pain point in Python), but you'll need to learn about them if you want to print output.