Install Required Gems
- Start with installing the `http` and `json` gems, which help facilitate API requests and parsing JSON responses. Include them in your Gemfile or install them directly using the command line.
- Execute the installation command for gems if you choose direct installation:
gem install http
gem install json
Authenticate Instagram API
- To interact with Instagram, you need an access token. This token can be obtained through Instagram's OAuth system.
- First, obtain your Client ID and Client Secret from the Instagram Developer portal after setting up your application.
- Direct users to the Instagram authorization URL to get their permission to access their photos. Here's an example URL pattern:
auth_url = "https://api.instagram.com/oauth/authorize?client_id=#{CLIENT_ID}&redirect_uri=#{REDIRECT_URI}&scope=user_profile,user_media&response_type=code"
- After authorization, exchange the received authorization code for an access token using a POST request to Instagram's token endpoint:
require 'http'
response = HTTP.post("https://api.instagram.com/oauth/access_token", form: {
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
grant_type: 'authorization_code',
redirect_uri: REDIRECT_URI,
code: 'AUTH_CODE_RECEIVED'
})
access_token = JSON.parse(response.body.to_s)["access_token"]
Make API Requests to Fetch Photos
- Use the access token to make requests to Instagram's API. To fetch a user's photos, you'll interact with the `user_media` endpoint.
- Here's an example of how to make a GET request to fetch the photos:
require 'json'
require 'http'
def fetch_instagram_photos(access_token)
response = HTTP.auth("Bearer #{access_token}")
.get("https://graph.instagram.com/me/media", params: { fields: 'id,caption,media_url,permalink' })
JSON.parse(response.body.to_s)["data"]
end
photos = fetch_instagram_photos(access_token)
photos.each do |photo|
puts "Caption: #{photo['caption']}"
puts "Image URL: #{photo['media_url']}"
puts "Permalink: #{photo['permalink']}"
end
Handling Errors
- API calls may fail for various reasons such as rate limits, expired tokens, or invalid requests. Check the HTTP status code and response body for error details.
- Implement a basic error handling strategy to address common issues:
def fetch_instagram_photos_with_error_handling(access_token)
response = HTTP.auth("Bearer #{access_token}")
.get("https://graph.instagram.com/me/media", params: { fields: 'id,caption,media_url,permalink' })
if response.status.success?
JSON.parse(response.body.to_s)["data"]
else
puts "Error: #{response.status}"
puts JSON.parse(response.body.to_s)["error"]["message"]
[]
end
end
Further Customizations
- Expand your application's functionality according to your needs. You might want to save images locally, display them in a web application, or analyze engagement data.
- Consider implementing pagination if you need to access a large number of photos due to Instagram's pagination on user media.
- Remember to update your access token regularly, as Instagram tokens have an expiration time.