Ch10.5.2: Demo: Alt-text From Twitter#

Now that we’ve seen how to select additional information about Tweet images and data, let’s search for images and look up some alt-text:

Normal Tweepy Set-Up#

import tweepy

(optional) use the fake version of tweepy, so you don’t have to use real twitter developer access passwords

%run ../../fake_tweepy/fake_tweepy.ipynb
Fake tweepy is replacing the tweepy library. Fake Tweepy doesn't need real passwords, and prevents you from accessing real twitter
# Load all your developer access passwords into Python
# TODO: Put your twitter account's special developer access passwords below:
bearer_token = "n4tossfgsafs_fake_bearer_token_isa53#$%$"
consumer_key = "sa@#4@fdfdsa_fake_consumer_key_$%DSG#%DG"
consumer_secret = "45adf$T$A_fake_consumer_secret_JESdsg"
access_token = "56sd5Ss4tsea_fake_access_token_%YE%hDsdr"
access_token_secret = "j^$dr_fake_consumer_key_^A5s#DR5s"
# Give the tweepy code your developer access passwords so
# it can perform twitter actions
client = tweepy.Client(
   bearer_token=bearer_token,
   consumer_key=consumer_key, consumer_secret=consumer_secret,
   access_token=access_token, access_token_secret=access_token_secret
)
Fake Tweepy is pretending to log in to twitter

Do a search for tweets, loop through the tweets and display the alt-text information#

query = "dog -is:retweet has:images"

tweet_search_results = client.search_recent_tweets(
                                    query=query,
                                    expansions='attachments.media_keys', #tell twitter to download the media related to this tweet
                                    media_fields=['alt_text', 'url'],  # when getting the media, make sure to include this info
                                    max_results=100
                                    )


# make media_lookup dictionary
media_lookup = {m.media_key: m for m in tweet_search_results.includes['media']}

# go through each tweet
for tweet in tweet_search_results.data:
    
    # use the tweet id to make a link to this specific tweet
    print('https://twitter.com/twitter/statuses/' + str(tweet.id))
    
    # print the text content of the tweet
    print(tweet.text)
    
    # print the info on "attachments" for this tweet
    #  in this case, it will be the media_keys
    
    #get the media keys for this tweet
    media_keys = tweet.data['attachments']['media_keys']
    
    for media_key in media_keys:
        # lookup the info about this particular media_key
        media_info = media_lookup[media_key]

        # print out some info about this piece of media
        print("  type: " + media_info.type)
        print("  alt_text: " + str(media_info.alt_text))
        print("  url: " + str(media_info.url))
        print()
       
    # display a clear divider so we can more easily see each tweet
    print("------------------------")
    print()
Fake Tweepy is pretending to search for 'dog -is:retweet has:images' and is returning some fake tweets.
https://twitter.com/twitter/statuses/2342352355
Look at my cute dog!
  type: photo
  alt_text: Photo of a small dog lying flat on floor, looking exhausted
  url: fake_website_photo1.jpg

------------------------

https://twitter.com/twitter/statuses/93298432
check out these dog photos
  type: photo
  alt_text: None
  url: fake_website_photo2.jpg

  type: photo
  alt_text: None
  url: fake_website_photo3.jpg

------------------------

https://twitter.com/twitter/statuses/43954354
lol silly dog!
  type: photo
  alt_text: photo taken by fake user 2
  url: fake_website_photo4.jpg

------------------------

What alt-texts do you find helpful?#

In the above output, you are in a position where you can read the alt-text of the image, but you can’t see the image (unless you open up the actual tweets, which if you are looking at the fake_tweepy output, there are no actual tweets).

Without seeing the images you can hopefully see what makes alt-text useful or not. Posts without alt-text will be hard to make sense of, and some alt text on photos might tell you information about the photo, but not the information you need.