LaTeX表記の数式を画像で返送するLINE botの作成
7062 ワード
$ax^2+bx+c=0$
のように$記号でLaTeX表記の数式を囲むと、画像が返送されます。なお、1つのメッセージにつき1つの数式を返すことができます。
LaTeX表記については、http://www.latex-cmd.com をご覧ください。
友だち追加
ここから友だち追加をすることができます。
開発
以下の参考を読み、実装しました。
参考
- https://github.com/line/line-bot-sdk-ruby
- https://developers.line.biz/ja/reference/messaging-api/
- https://developers.google.com/chart/infographics/docs/formulas
Google Chart APIの数式は非推奨となったようなので、いつ使えなくなるかはわかりません。
CGIモジュールを使用しているのは、+
などの記号をエンコードする必要があるためです。
callback.rb
class LinebotController < ApplicationController
require 'line/bot'
require 'cgi'
protect_from_forgery :except => [:callback]
def client
@client ||= Line::Bot::Client.new { |config|
config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
}
end
def callback
body = request.body.read
signature = request.env['HTTP_X_LINE_SIGNATURE']
unless client.validate_signature(body, signature)
head :bad_request
end
events = client.parse_events_from(body)
events.each { |event|
case event
when Line::Bot::Event::Message
case event.type
when Line::Bot::Event::MessageType::Text
if event.message['text'].include?('$')
formula = CGI.escape(event.message['text'].match(/(?<=\$)(.*)(?=\$)/).to_s())
message = {
type: "image",
originalContentUrl: "https://chart.apis.google.com/chart?cht=tx&chl=#{formula}",
previewImageUrl: "https://chart.apis.google.com/chart?cht=tx&chl=#{formula}"
}
client.reply_message(event['replyToken'], message)
end
end
end
}
head :ok
end
end
Author And Source
この問題について(LaTeX表記の数式を画像で返送するLINE botの作成), 我々は、より多くの情報をここで見つけました https://qiita.com/yudukikun5120/items/ec2fc172d180c099f24d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .