LINE Messaging API를 사용하여 임의의 사진 보내기
하고 싶은 일
사진은 스마트 폰으로 자주 찍히기 때문에 쌓이지만 수가 많아지면 과거의 사진이 묻혀 갑니다.
그래서 Google 포토의 특정 앨범에서 무작위로 사진을 선택하고 LINE의 토크로 보내는 기능을 bot에 구현했다. 그렇게하십시오.
준비
htps : // 이런. 로 ごぉぺrs. 오, ぇ. 이 m 에서 프로젝트 등록, 자격 증명 취득
h tp // w w. 요헤이 m. 네 t/bぉg. php? q=20160411 당을 참고로
구현
루비로 해. LINE, Google 모두 다양한 언어로 라이브러리가 나와 있으므로, 좋아하는 것을 사용하면 좋다고 생각한다.
Google 포토에서 무작위로 사진 가져오기
Picasa Web Album Data API
이 느낌 ...
require 'signet/oauth_2/client'
require 'picasa'
require 'dotenv'
Dotenv.load
class PicasaClient
def initialize
@client = nil
end
def client
@client ||= Picasa::Client.new(user_id: ENV['GOOGLE_USER_ID'], access_token: access_token)
end
def access_token
signet = Signet::OAuth2::Client.new(
client_id: ENV['GOOGLE_CLIENT_ID'],
client_secret: ENV['GOOGLE_CLIENT_SECRET'],
token_credential_uri: "https://www.googleapis.com/oauth2/v3/token",
refresh_token: ENV['GOOGLE_REFRESH_TOKEN']
)
signet.refresh!
# Use access token with picasa gem
puts "access_token:" + signet.access_token
signet.access_token
end
def get_random_photo_url
album = client.album.list.entries.find{ |a| a.title == ENV['GOOGLE_PHOTO_ALBUM_NAME'] }
photo = client.album.show(album.id).entries.sample
photo.content.src
end
end
LINE Bot에서 이미지 보내기
일방적으로 사진을 보내는 명령을 만들어 보자. 이런 느낌. 같은 모양을 하고 있다. (이것은 어디에서 취하는 것이 편하겠지.
require 'line/bot'
require 'dotenv'
Dotenv.load
def line_send_image(target, image_url)
line_client = Line::Bot::Client.new { |config|
config.channel_secret = ENV['LINE_CHANNEL_SECRET']
config.channel_token = ENV['LINE_CHANNEL_TOKEN']
}
message = {
type: "image",
originalContentUrl: image_url,
previewImageUrl: image_url
}
line_client.push_message(target, message)
end
log = Logger.new(STDOUT) # !> assigned but unused variable - log
picasa = PicasaClient.new
line = LineClient.new
photo_url = picasa.get_random_photo_url
res = line.send_image(ENV['LINE_SEND_TARGET'], photo_url)
대화에 반응하여 이미지 보내기
Bot의 webhook URL에서 지정한 URL에 웹서버를 세우게 된다. 하자.
require "sinatra/base"
require 'line/bot'
require 'dotenv'
module MyBotserver
class Server < Sinatra::Base
Dotenv.load
helpers do
def client
@client ||= Line::Bot::Client.new { |config|
config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
}
end
end
post '/line' do
request.body.rewind
body = request.body.read
events = client.parse_events_from(body)
events.each do |event|
case event
when Line::Bot::Event::Message
when Line::Bot::Event::MessageType::Text
message = {}
case event.message['text']
when /^p$/
logger.info "Sending photo"
picasa = PicasaClient.new
photo_url = picasa.get_random_photo_url
message = {
type: 'image',
originalContentUrl: photo_url,
previewImageUrl: photo_url
}
res = client.reply_message(event['replyToken'], message)
logger.warn "Message send error: " + res.body unless res.is_a?(Net::HTTPOK)
end
unless message.empty?
logger.info "Sending message #{message}"
client.reply_message(event['replyToken'], message)
end
end
end
end
end
end
요약
LINE Messaging API를 사용하여 Google 포토에서 랜덤한 사진을 LINE 토크로 전송하는 기능을 구현해 보았다. 꽤 재미 있습니다.
아이의 옛날 사진을 보내거나 배고픈 시간을 목표로 밥 이미지를 보내거나 놀면 좋을 것입니다.
Reference
이 문제에 관하여(LINE Messaging API를 사용하여 임의의 사진 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ogibayashi/items/6a65f2073bbc1ab0e6b3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)