12/08/2018, 17:12

Sống ảo với Instagram API và Rails

Trong phạm vi bài viết này mình sẽ giới thiệu cho mọi người vài đường cơ bản về Instagram API cũng như cách sử dung nó trong một ứng dụng Rails. Ví dụ nếu một ngày nào đó bạn có nhu cầu làm 1 website sử dụng các hình ảnh từ mạng xã hội này chẳng hạn, chứ trong phạm vi dự án thì hiện mình vẫn chưa ...

Trong phạm vi bài viết này mình sẽ giới thiệu cho mọi người vài đường cơ bản về Instagram API cũng như cách sử dung nó trong một ứng dụng Rails.

Ví dụ nếu một ngày nào đó bạn có nhu cầu làm 1 website sử dụng các hình ảnh từ mạng xã hội này chẳng hạn, chứ trong phạm vi dự án thì hiện mình vẫn chưa gặp =))

Bài viết được mình dịch lại từ một bài đăng của một blogger và thêm mắm dặm muối cắt tỉa các thứ sau khi mình đã đọc hiểu và thử. Hy vọng rằng tác giả nếu đọc được thì không thấy phiền hà gì, mình chỉ muốn dịch ra để chia sẻ.

Nguồn mình sẽ để ở phía dưới bài viết. Peace!

1. Instagram API là gì? Có quen không? Có cần đi ra không ?

Instagram thì có lẽ không còn xa lạ gì với các bạn trẻ, đây là một mạng xã hội chia sẻ ảnh/video hàng đầu thế giới hiện nay. Instagram thật sự bùng nổ và được biết đến rộng rãi sau khi được mua lại bởi Facebook vào tháng 4 năm 2012 với giá xấp xỉ 1 tỉ đô.

Và tất nhiên một mạng xã hội lớn như thế này sẽ phải cung cấp cho các nhà phát triển những phương tiện để tương tác trong các ứng dụng thứ 3. Instagram API được tạo ra để làm điều đó.

2. Làm sao để tương tác với Instagram API ? Có cần thần thái thần kinh gì không ?

Đường vào tim em cũng không băng giá lắm, chúng ta có 3 bước cơ bản:

  • Đăng kí
  • Xác thực
  • Tạo request

2.1 Đăng kí ứng dụng của bạn trên Instagram API

Chỉ cần đến trang Manage Clients và đăng kí một Client mới. Sau khi đăng kí xong, chúng ta sẽ có Client ID và Secret, những thứ sẽ được sử dụng trong bước xác thực tiếp theo

2.2 Xác thực (Phía Client)

Một request xác thực sẽ yêu cầu access_token. Những token này là duy nhất với một user nên hãy giữ nó private. Những token này có thể hết hạn bất cứ lúc nào =)) Hết thì vào xin lại thôi 2 bước để vào xin lại access-token:

  • Truy cập vào đường link có dạng:

https://instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

  • Nhận access_token thông qua một phần URL:

Sau khi chúng ta đã xác thực, Instagram sẽ redirect về redirect_uri mà chúng ta đã điền ở trên cũng với access_token trong url với dạng: http://your-redirect-uri#access_token=ACCESS-TOKEN

2.3 Tạo request đến dữ liệu Instagram

Việc xác thực đã xong, bây giờ chúng ta có thể tương tác với Instagram API Endpoints Những thứ mà chúng ta có thể tương tác bao gồm: Users, Media, Comments, Likes, Tags, Location . . .

3. Kết hợp vào ứng dụng Rails

Bây giờ chúng ta sẽ implement một ứng dụng Rails để lấy những hình ảnh hiện có ở Instagram với hashtag "#fashion"

  • Bước 1: Chỉ cần thêm instagram-ruby-gem vào Gemfile là xong

  • Bước 2: Thêm file instagram.rb vào thư mục config/initializes

 Instagram.configure do |config|
  config.client_id     = CLIENT_ID
  config.client_secret = CLIENT_SECRET
  config.access_token  = ACCESS_TOKEN
end

Các thông số chính là những gì các bạn đã lấy được ở các bước trước nhé.

  • Bước 3: Viết phương thức để lấy media có hashtag "#fashion"
  • Đầu tiên tạo một model Photo với 1 vài trường cần thiết để lưu dữ liệu từ Instagram rails generate model Photo thumbnail_url:string owner:string link:string
  • Bây giờ sử dụng tag_recent_media được cung cấp bởi gem để viết thôi.
class Photo < ActiveRecord::Base
  validates :thumbnail_url, :owner, :link, :presence => true

  def get_recent_media
    recent_media = Instagram.tag_recent_media('fashion')

    recent_media.each do |media|
      Photo.create(
        link: media.link,
        owner: media.caption.from.username,
        thumbnail_url: media.images.thumbnail.url
      )
    end
  end
end

Xong rồi đấy, giờ các bạn có thể kiếm tra data để xem hàng. Và tất nhiên là còn rất nhiều trò vui khác mà bạn có thể nghĩ ra để làm =))

Nguồn:

Luan Nguyen Blog: http://luanotes.com/posts/instagram-api-with-rails

Instagram Develop: https://www.instagram.com/developer/

Instagram Ruby Gem: https://github.com/facebookarchive/instagram-ruby-gem

0