Skip to content

Commit b87aae3

Browse files
authored
Store received contents in example v2 (line#557)
related to line#533
1 parent 5cb0cfa commit b87aae3

File tree

2 files changed

+64
-16
lines changed

2 files changed

+64
-16
lines changed

examples/v2/kitchensink/app.rb

Lines changed: 64 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -117,37 +117,85 @@ def parser
117117
"OK"
118118
end
119119

120+
def storeContent(message_id:, message_type:)
121+
case message_type
122+
when :video, :audio
123+
max_retries = 10
124+
125+
max_retries.times do |i|
126+
body, status_code, _headers = blob_client.get_message_content_transcoding_by_message_id_with_http_info(
127+
message_id: message_id
128+
)
129+
130+
unless status_code == 200
131+
logger.warn "get_message_content_transcoding_by_message_id failed. status_code=#{status_code}, error=#{body}"
132+
sleep 1
133+
next
134+
end
135+
136+
current_status = body.status
137+
138+
if current_status == 'succeeded'
139+
logger.info "Transcoding succeeded for message_id=#{message_id}"
140+
break
141+
elsif current_status == 'failed'
142+
logger.error "Transcoding failed for message_id=#{message_id}"
143+
return nil
144+
else
145+
## waiting: transcoding in progress
146+
sleep 1
147+
if i == max_retries - 1
148+
logger.error "Transcoding timed out for message_id=#{message_id}"
149+
return nil
150+
end
151+
end
152+
end
153+
end
154+
155+
content, _, headers = blob_client.get_message_content_with_http_info(message_id: message_id)
156+
content_type = headers['content-type']
157+
ext = case content_type
158+
when 'image/jpeg' then 'jpg'
159+
when 'image/png' then 'png'
160+
when 'image/gif' then 'gif'
161+
when 'video/mp4' then 'mp4'
162+
else
163+
logger.warn "Unknown content type: #{content_type}"
164+
'bin'
165+
end
166+
167+
filename = "#{message_id}.#{ext}"
168+
save_path = File.join(settings.root, 'public', 'statics', filename)
169+
logger.info "Saving content to #{save_path}"
170+
File.open(save_path, 'wb'){|f| f.write(content)}
171+
172+
return File.join(settings.app_base_url, 'statics', filename)
173+
end
174+
120175
def handle_message_event(event)
121176
message = event.message
122177

123178
case message
124179
when Line::Bot::V2::Webhook::ImageMessageContent
125180
message_id = message.id
126-
response = blob_client.get_message_content(message_id: message_id)
127-
tf = Tempfile.open("content")
128-
tf.write(response)
129-
reply_text(event, "[MessageType::IMAGE]\nid:#{message_id}\nreceived #{tf.size} bytes data")
181+
logger.info "Image message ID: #{message_id}"
182+
url = storeContent(message_id: message_id, message_type: :image)
183+
reply_text(event, "[MessageType::IMAGE]\n Stored file: #{url}")
130184

131185
when Line::Bot::V2::Webhook::VideoMessageContent
132186
message_id = message.id
133-
response = blob_client.get_message_content(message_id: message_id)
134-
tf = Tempfile.open("content")
135-
tf.write(response)
136-
reply_text(event, "[MessageType::VIDEO]\nid:#{message_id}\nreceived #{tf.size} bytes data")
187+
url = storeContent(message_id: message_id, message_type: :video)
188+
reply_text(event, "[MessageType::VIDEO]\n Stored file: #{url}")
137189

138190
when Line::Bot::V2::Webhook::AudioMessageContent
139191
message_id = message.id
140-
response = blob_client.get_message_content(message_id: message_id)
141-
tf = Tempfile.open("content")
142-
tf.write(response)
143-
reply_text(event, "[MessageType::AUDIO]\nid:#{message_id}\nreceived #{tf.size} bytes data")
192+
url = storeContent(message_id: message_id, message_type: :audio)
193+
reply_text(event, "[MessageType::AUDIO]\n Stored file: #{url}")
144194

145195
when Line::Bot::V2::Webhook::FileMessageContent
146196
message_id = message.id
147-
response = blob_client.get_message_content(message_id: message_id)
148-
tf = Tempfile.open("content")
149-
tf.write(response)
150-
reply_text(event, "[MessageType::FILE]\nid:#{message_id}\nreceived #{tf.size} bytes data")
197+
url = storeContent(message_id: message_id, message_type: :file)
198+
reply_text(event, "[MessageType::FILE]\n Stored file: #{url}")
151199

152200
when Line::Bot::V2::Webhook::StickerMessageContent
153201
reply_text(event, "[MessageType::STICKER]\npackage_id: #{message.package_id}\nsticker_id: #{message.sticker_id}")

examples/v2/kitchensink/public/statics/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)