7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

エビ中とLINEしてる気分になれるChatBotをPictRubyで作ってみた

Last updated at Posted at 2016-04-09

おはようございます。中20のチェレンコフです。
qiita初投稿です。よろしくお願いします。

最近ChatBotがアツいらしく、
先日LINEのBOT APIが公開されて、早速 @masuidriveさんが遊んでおられる。
とりあえずLINE BOT APIでオウムを作ってみた - Qiita

総裁のブログなんてお昼から繋がらない。
はてなブックマーク - 2016年後半はbotが来るわ。LINE-bot作ったけどマジでやばい。 | ふくゆきブログ

乗るしかない このビッグウェーブに

##エビ中とLINEがしたくて
PictRuby v0.5でLINE BLOGの記事を使ったChatBotを作りました。
※記事はRSSで取得します。
pictruby_chatbot1pictruby_chatbot2

##遊び方
iosアプリのPictRubyをインストールして下記のコードをコピペして実行。
最新10件のタイトルが表示されるので対応する数字をつぶやくと会話が始まります。
LINE固有?の絵文字は文字化けするようです😢
RSSのURLを変えればほかのアイドルさんのLINE BLOGもいけるはずです。

line_like_chatbot.rb
#line_like_chatbot v0.1
class Chat
  def initialize
    feed = "http://lineblog.me/ebichu/index.rdf"
    count = 10
    url = "https://query.yahooapis.com/v1/public/yql?q=SELECT%20title%2Clink%2Cencoded%20FROM%20rss%20WHERE%20url%3D%22" + URI.encode_www_form_component(feed) + "%22%20%7C%20truncate(count%3D" + count.to_s + ")&format=json"
    data = Browser.json url
    @menu = []
    @text = []
    data['query']['results']['item'].each_with_index {|item,i|
      @menu.push "#{i+1}:#{item['title']}"
      @text.push item['encoded']
    }
    @menu = @menu.join("\n")
    @select_index = nil
    @stdout = nil
    @i = -1
  end
  
  def welcome
    @menu
  end
  
  def call(input)
    if @select_index == nil
      @select_index = input.to_i 
      src = @text[@select_index-1]
      url = "http://api.dan.co.jp/lleval.cgi?l=rb&s=" + URI.encode_www_form_component("p '#{src}'")+".gsub(%2F%5Cn%5Cs%2B%7C(%3Cbr%5Cs%5C%2F%3E)%2B%2F%2C%22%5Cn%22).gsub(%2F%3C(%22%5B%5E%22%5D*%22%7C'%5B%5E'%5D*'%7C%5B%5E'%22%3E%5D)*%3E%2F%2C'').gsub(%2F(%5CA%5Cn%2B%7C%5Cn%2B%5Cz)%2F%2C%22%22).split(%2F%5Cs*%5Cn%2B%5Cs*%2F)"
      json = Browser.json url
      @stdout = eval(json['stdout'])
      @i += 1
      @stdout[@i].strip
    else
      @i += 1
      @i < @stdout.size ? @stdout[@i].strip : "おわり🍤"
    end
  end
end

####感想
Rubyほとんど書いたことがなくていろいろハマって大変だった。夜なべすること5日。pとputsでマルチバイト文字列の見え方が変わって8進数表記の文字列どうしたらええねん!とか。
PictRubyはJSONを取ってこれるのでYQLで記事をJSONに加工して取得した。
あとPictRuby0.5では正規表現に対応していないので @dankogai さんのllevalでHTMLタグ除去に成功した。マジ感謝。
gsubの正規表現のダブルクォーテーションとかエスケープしてもllevalでエラーで返ってきたので、事前にエンコードしてくっつけたらうまくいった。
PictRuby 0.5 リリース - チャットボット、eval、irb - ブログのおんがえし
※次期バージョンで正規表現対応するとのこと。期待!!

PictRubyはサンプルがよく出来ていて、学研 科学のふろくのようなワクワク感が味わえます!

こちらからのおんがえしは以上です!!!!! @ongaeshi

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?