勉強メモ hatenablog Gemを使ってはてなブログに投稿する
なにそれ
参考
メモ
特に詰まったところもなくてよかった😄 (設定ファイルがconf.ymlじゃなくてconfig.ymlだったくらい)
今回は非公開ブログにアクセスしたかったのではてなの設定画面からOAuth scope(許可操作)のread_private
, write_private
にチェックを入れた。
書き方メモ Ruby
Ruby初心者なのでggr方もよちよちである。
同じ苦労の繰り返しはつらいので随時まとめる。
continue
的なやつ
next
を使う
map
概要
配列の中身を変換する
用例
a1 = [100, 200, 300] a2 = a1.map { |x| x * 2 } p a2 # => [200, 400, 600]
参考
Rubyのmap, map!メソッドの使い方 - UX MILK
reduce
概要
配列の内容を使って繰り返し計算する
用例
numbers = [1,2,3,4,5] puts numbers.reduce {|sum, n| sum + n } # => 15
参考
https://ref.xaio.jp/ruby/classes/enumerable/reduce
オブジェクトの変換
String
→ Integer
用例
s = "1993" puts s.to_i # => 1993
参考
https://ref.xaio.jp/ruby/classes/string/to_i
Addressable::URI
→ String
用例
Addressable::URI.encode(url)
参考
http://www.rubydoc.info/gems/addressable/Addressable/URI#encode-class_method
文字列操作
連結
str = 'abc' << 'def' # => "abcdef" str = 'abc'.concat('def') # => "abcdef"
参考
勉強メモ Instagram gemを使う
自分の投稿を引っ張ってくるまでのメモ
結果から言うとエンドポイントが古いAPIがあって一部使えなかった。 でもとりあえず欲しいAPIのエンドポイントはまだ生きていたので使用した。
参考
インストール
Gemfileに以下を追加してbundle install
gem 'instagram'
アプリケーションの登録, Client IDの取得
下記から登録
http://instagram.com/developer/
登録内容は参考ページ参照
登録できると、CLIENT ID
, Client Secret
が取得できる。
なお、最初はSandbox Modeなる設定になっている。 Instagramのコンテンツに完全にアクセスするにはレビューが必要らしい。
Sandbox Modeでも機能制限はあるものの普通にAPIは使えるっぽい。 詳しくはこちら
取得したClient ID
とClient secret
を登録
require 'instagram' Instagram.configure do |config| config.client_id = "CLIENT_ID" config.client_secret = "CLIENT_SECRET" end
AccessTokenを取得
APIを使用するためににAccessTokenが必要。 使用しないと怒られる
400: The access_token provided is invalid. (Instagram::BadRequest)
AccessTokenの取得方法はこちら。
以下にかいつまんだ取得方法を
1. Codeを取得する
以下のURLを叩いてcodeを取得する
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code
叩くとredirect URLにcodeが付加されている
http://your-redirect-uri?code=CODE
これをコピっておく
2. AccessTokenをリクエスト
以下のCURLを叩く
curl -F 'client_id=CLIENT_ID' \ -F 'client_secret=CLIENT_SECRET' \ -F 'grant_type=authorization_code' \ -F 'redirect_uri=AUTHORIZATION_REDIRECT_URI' \ -F 'code=CODE' \ https://api.instagram.com/oauth/access_token
うまくいくと以下のレスポンスが返ってくる
{ "access_token": "fb2e77d.47a0479900504cb3ab4a1f626d174d2d", "user": { "id": "1574083", "username": "snoopdogg", "full_name": "Snoop Dogg", "profile_picture": "..." } }
フィードを取得する
以下、実装例
require 'instagram' Instagram.configure do |config| config.client_id = "CLIENT_ID" config.client_secret = "CLIENT_SECRET" end Instagram.access_token = "ACCESS_TOKEN" medias = Instagram.user_recent_media(USER_ID) medias.each do |media| p media end
ここで必要なのはACCESS_TOKEN
(前述)とUSER_ID
USER_IDはAccessToken取得時のレスポンスの"id"からコピペする。
勉強メモ Bundlerについて
Ruby初心者なんでメモ
参考
メモ
- Gem: Ruby言語用のライブラリ
- Rubygems: gem専用のパッケージ管理システム
- Bundler: プロジェクト内で使うRubygemsを管理するしくみ。
- gem同士の互換性を保ちながらgemの導入、管理を行う
- GemfileにインストールしたいGemを記述し、それを元にbundlerを使ってインストールを行う
Gemfileの作成
Bundle init
gemのインストール
bundle install
gemのアップデート
bundle update
bundlerで指定したgemを使う
これをやらないとシステムに入っている最新版のgemを使う
Bundle exec ruby hoge.rb
インストールしたgemをプログラム内でロード
require "hoge"