ひらやすみ

意識の高いブログ

食べたいものをツイートするとおすすめの店を紹介してくれる何か

ブログ力爆age Advent Calendar 2017 21日目の記事です。
adventar.org

アドベントカレンダーも終盤という所まで来ました。
僕自身も3回目の記事担当になりますが、皆さん2回3回と複数回担当されており、絶対繋いでやるという固い意志を感じますね。
前日の記事(2017年YouTubeで何度も繰り返し見た・おすすめしたい動画5本 - ytm_n’s diary)も読み、挙がってた動画を見てみましたが楽しめました。正直HIKAKINさんは結構好きです。


本題

さて、今回何を作ったかというと、タイトルの通りです。
「◯◯食べたい」というような日常の何気ない欲求がツイートされた時に、脈絡なくおすすめのお店をリプライで送りつけるというものです。
TLをリアルタイムで監視して、自分のアカウントから「○○食べたい」というツイートがされると、○○の部分をキーワードとしておすすめのお店を検索します。
その後、検索結果のおすすめ順で10位までのお店の中からランダムに選び、自分に向けてリプライで教えてくれます。


こんな感じです。


あとはhrys__さんあてにリプライを送った時のみ他のユーザーにも情報を返すようにもしてます。


変なことを言うと検索にヒットしなかった旨が返信されます。




ここには載せてませんが、地味に「◯◯飲みたい」というツイートにも反応するのでお酒が飲みたいときにも情報をくれます。
お酒食べたいとかカレー飲みたいとツイートしても反応します。


中身

twittterのAPIぐるなびAPIを叩いてます。
↓これ
ぐるなび Web Service - トップページ

エリアはとりあえず八王子で固定。位置情報をツイートからとって周辺の店を検索みたいなこともできますが、それだけのためにツイートに位置情報を付与するのもアホらしいのでやめました。

汚いですがコード載せておきます。
大したことしてないので特に解説することもないですね。

require 'json'
require 'twitter'
require 'open-uri'

CONSUMER = "YOUR_CONSUMER_KEY"
CONSUMER_SECRET = "YOUR_CONSUMER_SECRET"
TOKEN = "YOUR_ACCESS_TOKEN"
TOKEN_SECRET = "YOUR_ACCESS_TOKEN_SECRET"

rest = Twitter::REST::Client.new do |config|
  config.consumer_key        = CONSUMER
  config.consumer_secret     = CONSUMER_SECRET
  config.access_token        = TOKEN
  config.access_token_secret = TOKEN_SECRET
end

stream = Twitter::Streaming::Client.new do |config|
  config.consumer_key        = CONSUMER
  config.consumer_secret     = CONSUMER_SECRET
  config.access_token        = TOKEN
  config.access_token_secret = TOKEN_SECRET
end

my_name = rest.user.screen_name
stream.user do |object|
  regex = /食べたい$|飲みたい$/
  if (object.is_a?(Twitter::Tweet) && object.text.match(regex)) \
    && (object.user.screen_name == my_name || object.in_reply_to_screen_name == my_name)
    id = object.id
    to_name = object.user.screen_name
    food = object.text.gsub(regex, "")
    food = food.gsub(/@.+\s/, "") if object.in_reply_to_screen_name == my_name
    url = "https://api.gnavi.co.jp/RestSearchAPI/20150630/?keyid=<keyid>&format=json&areacode_s=AREAS2288&freeword=#{food}&hit_per_page=1"
    hash =  JSON.parse(open(URI.escape url).read)
    if hash['error']
      rest.update("@#{to_name} \"#{food}\"に関するお店が見つかりません", in_reply_to_status_id: id)
    else
      name =  hash['rest']['name']
      link = hash['rest']['url']
      rest.update("@#{to_name} このお店がおすすめです\n#{name}\n#{link}", in_reply_to_status_id: id)
    end
  end
end


諸々のgemをインストールしたり、自分でkey登録して該当箇所を書き換えればすぐ動くと思います。
試したい方はどうぞ。

最後に

なんでこんなものを作ったのかというと、お腹が減ってるときに思いついた以上の理由はありません。
グルメ検索ってだけならもっと便利な実装ができると思いますが、何気ない「~食べたい」というツイートにスッと店のURL飛んできたら面白いんじゃねという一発ネタなので細かいことは気にしないでください。


明日の担当はあのkrkrkgrさんです。

Quineで遊ぶ

ブログ力爆age Advent Calendar 2017 16日目の記事です。
adventar.org

今年2回目の担当です。皆さんきちんと書いて繋げているので自分もちゃんと埋めようという気持ちになりますね。

早速ですが、今回はQuineで遊んでみようと思います。

Quineとは

簡単に言えば実行すると自分自身を出力するプログラムのことです。
このスライドとか面白いと思います。
Quine・難解プログラミングについて

コードを絵にしたりゲームにしたりする変態もいます。世界は広い。

Quine×AA

参考
mickey24.hatenablog.com

AAをQuine化してみようと思います。
過程はかなり省略するので詳しくは上記記事をご参照ください。

今回Quine化するAA。

                                                     /*[*/#include<stdio.h>//
                         #include<stdlib.h>//]++++[->++[->+>++++<<]<][(c)2013]
                        #ifndef                                           e//[o
                       #include<string.h>//]![misaka.c,size=3808,crc=d0ec3b36][
                      #define e                                           0x1//
                     typedef struct{int d,b,o,P;char*q,*p;}f;int p,q,d,b,_=0//|
                  #include __FILE__//]>>>[->+>++<<]<[-<<+>>>++<]>>+MISAKA*IMOUTO
                #undef e//[->[-<<+<+<+>>>>]<<<<<++[->>+>>>+<<<<<]>+>+++>+++[>]]b
             #define e(c)/**/if((_!=__LINE__?(_=__LINE__):0)){c;}//[20002,+[-.+]
            ,O,i=0,Q=sizeof(f);static f*P;static FILE*t;static const char*o[]={//
          "\n\40\"8oCan\40not\40open %s\n\0aaFbfeccdeaEbgecbbcda6bcedd#e(bbed$bbd",
        "a6bgcdbbccd#ead$c%bcdea7bccde*b$eebbdda9bsdbeccdbbecdcbbcceed#eaa&bae$cbe",
       "e&cbdd$eldbdeedbbdede)bdcdea&bbde1bedbbcc&b#ccdee&bdcdea'bbcd)e'bad(bae&bccd",
      "e&bbda1bdcdee$bbce#b$c&bdedcd%ecdca4bhcdeebbcd#e$b#ecdcc$bccda7bbcc#e#d%c*bbda",
     ">bad/bbda"};static int S(){return(o[p][q]);}static/**/int/**/Z=0  ;void/**/z(int//
    l){if(/**/Z-l){Z=l;q++;if(p<b*5&&!S()){p+=b;q=0;}}}int main(int I,    /**/char**l){//
   d=sizeof(f*);if(1<(O=_)){b=((sizeof(o)/sizeof(char*))-1)/4;q=22; p=     0;while(p<b*5){
  /*<*/if(Z-1){d=S()>96;i=S()-(d?96:32) ;q++;if(p<b*5&&!S()){p+=b;  q=      0;}Z=1;}/*[[*/
  while(i){_=o[0][S()-97];I=_-10?b:1;   for( ;I--;)putchar(_ );if   (!      --i||d)z(~i );}
 if(p==b*5&&O){p-=b;O--;}}return 0U;   }if(! (P=( f*)calloc /*]*/  (Q        ,I)))return 1;
 {;}for(_=p=1;p<I;p++){e(q=1);while    (q<   p&&  strcmp(  l[p     ]         ,l[(q)]))++  q;
 t=stdin;if(q<p){(void)memcpy/* "      */    (&P  [p],&P   [q     ]          ,Q);continue ;}
if(strcmp(l[p],"-")){t=fopen(l         [     p]   ,"rb"   )                  ;if(!t ){{;}  ;
printf(05+*o,l[p ]);return+1;                      {;}                       }}_=b= 1<<16   ;
*&O=5;do{if(!(P[p].q=realloc   (P[p].q,(P[p].P     +=       b)+1))){return   01;}O   &=72   /
6/*][*/;P[p].o+=d=fread(P[p]      .q       +P[     p           ].       o,  1,b,t)   ;}//
 while(d==b)      ;P [p].q[       P[       p]                  .o       ]=  012;d    =0;
 e(fclose(t        )  );P         [p]      .p                  =P[      p]  .q;if    (O)
 {for(;d<P[            p]          .o     ;d=                   q+     1)    {q=     d;
  while(q<P[                        p].o&&P[                    p].q[q]-     10     ){
  q++;}b=q-d;                         _=P                         [p].        d     ;
  if(b>_){/*]b                                                                */
   P[p].d=b;}{;                                                                }
   #undef/*pqdz'.*/  e//                                                      ;
   #define/*s8qdb]*/e/**/0                                                   //
   //<<.<<.----.>.<<.>++.++<                                              .[>]
   /*P[*/P[p].b++;continue;}}}t=                                       stdout;
  for (p=1;p<I;p++){/**/if(P[p].b>i                               ){i=P[p].b;}}
 if  (O){for(p=0;p<i;p++){q=0;/*[*/while(I               >++q){_=P[q].p-P[q ].q;
b=   0;if(_<P[q ].o){while(012-*P[q].p)     {putchar(*(P[q].p++));b++;}P[q]. p++;
}   ;while (P[  q].d>b++)putchar(040);}             putchar(10);}return 0;}p   =1;
   for(;   p<I   ;p++)fwrite(P[p] .q,P[              p].o,1,t);return 0 ;}//
  #/*]     ]<.    [-]<[-]<[- ]<[    -]<               [-  ]<;*/elif  e    //b
 |(1        <<     ( __LINE__        /*               >>   `*//45))  |     01U
             #                       /*               */     endif            //

コレ自体もコードになってますね。
misaka.c - ミサカ
ここから拝借。


このAAをなんやかんや処理して・・・

最終的なQuine

eval$s=%w'b="BAhsKwIFAQAAAAAAAOD//x8AAAAAwP//////fwcAAAAA/AEAAAAA8AEAAADA/////9/fPwAAAAD8BQAAAACABwAAAMDf//7///3vAAAAAP/+//////8/AAAA+P3///////8HAADg7//////7H/8AAAC+///73//3/T8AAPD9973v/////x8AgP///////////wcA+P///////////wOA/////////////wD4/7/7/////8f/P4D//////9/fv+H/D/j/////////N/D/g//////v//9/Bvx/8P/9/328/7/HwP8d////f8b3/vsM8H/j////fzjOn4MA/s/8////AsP5MQjA/9v///8PIBgfAQD4ffr79/8AAMABAAC/j////4//Pxjw/8Pj8f///4EBBwEwYH48+D+wHzBgAAAGjIcC/wPkAA4MAMCB+XDgfwAYgMEBADAYDgb4HwAA4B8AAP5BYAD/BwAAcAAAAA8QBOD/AQAAAAAAAAAGAPh/AAAAAAAAAIAAAP//HAAAAAAAAAgA4P//BwAAAAAAgAEA/P//BwAAAAAAHgCA////DwAAAAD4AwC4////DwAAAPj/AID53//7/wCA//89ABj++7//g////38PAPE7//91APDff44DAB/H/78PAPz/4wEA8ODwv8MBAPOfcAAABxj0DzAAYPwTGAAAAAIAAAYADD4ADA==";n=Marshal.load(b.unpack("m")[0]);e="eval$s=%w"<<39<<($s*3);o="";j=-1;0.upto(45*93-1){|i|o<<((n[i]==1)?e[j+=1]:32);o<<((i%93==92)?10:"")};o[-10,6]=""<<39<<".join";puts(o)#'.join


これを実行すると・・・

                                                     eval$s=%w'b="BAhsKwIFAQA
                         AAAAAAOD//x8AAAAAwP//////fwcAAAAA/AEAAAAA8AEAAADA ///
                        //9/fPw                                           AAAAD
                       8BQAAAACABwAAAMDf//7///3vAAAAAP/+////// 8/AAAA+ P3//////
                      /8HAADg 7                                            ////
                     //7H/8A AAC+///73/ /3/T8AAPD9973v/////x8AgP ////////// /wc
                  A+P///// //////wOA/////////////wD4/7/7/////8f/P4D//////9/fv+H/
                D/j/// //////N/D/g//////v//9/Bvx/8P/9/328/7/HwP8d////f8b3/vsM8H/
             j////fz jOn4MA/s/8////AsP5MQjA/9v///8PIBgfAQD 4ffr79/8AA   MABAAC/j
            ////4 //Pxjw/8Pj8f///4EBB wEwYH48+D+ wHzBgAAAGjIcC /wPkA A4MAMCB+XDgf
          wAYgM EBADAYDgb 4HwAA 4B8A AP5BY AD/BwAAcAAAAA8QBOD/AQAAAAAAAAAGAPh/AAAAA
        AAAAIAAAP//HAAAAAAAAAgA4P//BwAAAAAAgAEA/P//BwAAAAAAHgCA////DwAAAAD4AwC4////D
       wAAAPj/AID53//7/wCA//89ABj++7//g////38PAPE7//91APDff44DAB/H/78PAPz/4wEA8ODwv8MB
      APOfcAAABxj0DzAAYPwTGAAAAAIAAAYADD4ADA==";n=Marshal.load(b.unpack("m")[0]);e="eva
     l$s=%w"<<39<<($s*3) ;o= "";j=-1;0.upto(45*93-1){|i|o<<((n[i]==1)   ?e[j+=1]:32);o<<
    ((i%93==92)?10:"")};o[-10,6]=""<<39<<".join";p uts(o)# b="BAhsK wI    FAQAAAAAAAOD//x
   8AAAAAwP//////fwcAAAAA/AEAAAAA8AEAAADA/////9/fPwAAAAD8BQAAAACABw AA      AMDf//7///3vAA
  AAAP/+//////8/AAAA+P3///////8HAADg7// ////7H/8AAAC+///73//3/T8AA  PD       9973v/////x8A
  gP/////////// wcA+P////////// /wOA/   //// ////////wD4/7/7 ////   /8      f/P4D////// 9/f
 v+H/D/j/////////N/D/g//////v//9  /B   vx/8P /9/3 28/7/HwP8 d////  f8        b3/vsM8H/j/ //
 /fzjOn4MA/s/8////AsP5MQjA/9v///8PI    Bgf   AQD  4ffr79/  8AA     M         ABAAC/j////  4/
 /Pxjw/8Pj8f///4EBBwEwYH48+D+wH z      Bg    AAA  GjIcC/   wP     k          AA4MAMCB+XDg fw
AYgMEBADAYDgb4HwAA4B8AAP5BYAD/         B     wA   AcAAA   A                  A8QBOD /AQAA  A
AAAAAAG APh/AAAA AAAAAIAAAP//                      HAA                       AAAAAA AgA4P   /
/BwAAAAAAgAEA/P//BwAAAAAAHgC   A////DwAAAAD4Aw     C4       ////DwAAAPj/AI    D53/   /7/w   C
A//89ABj++7//g////38PAPE7//9      1A       PDf     f           44       DA  B/H/78   PAPz
 /4wEA8ODwv8      MB APOfcA       AA       Bx                  j0       Dz   AAYP    w T
 GAAAAAIAAA        Y  ADD         4AD      A=                  =";      n=  Marsh    al.
 load(b.unp            ac          k(     "m"                   )[     0]    );e     ="
  eval$s=%w"                        <<39<<($                    s*3);o="     "      ;j
  =-1;0.upto(                         45*                         93-1        )     {
  |i|o<<((n[i]                                                                ==
   1)?e[j+=1]:3                                                                2
   );o<<((i%93==92)  ?10                                                      :
   "")};o[-10,6]=""<<39<<                                                    ".
   join";puts(o)#b="BAhsKwIF                                              AQAA
   AAAAAOD//x8AAAAAwP//////fwcAA                                       AAA/AEA
  AAA A8AEAAADA/////9/fPwAAAAD8BQAA                               AACABwAAAMDf/
 /7  ///3vAAAAA P/+//////8/A AAA+P3///////               8HAADg7//////7H/8A AAC+
//    /73//3/T8 AAPD9973v// ///x8AgP///     ////////wcA+P///////////wOA///// ////
/   ///wD4 /7/  7/////8f/P4D///// / 9/f             v+H/D/j// ///////N/  D/g   ///
   ///v/   /9/   Bvx/8P/9/328/7/H wP8d/              ///f8b3/vsM8H/j/   ///f
  zjOn     4MA    /s/8////As P5M    QjA               /9  v///8PIBg  f    AQD
 4ff        r7     9 /8AAMABA        AC               /j   ////4//P  x      jw
             /                       8P               j8     f///4            EB    '.join

こんな感じで出てきます。
たーのしー!

Quine×画像

参考
d.hatena.ne.jp

続いては画像のQuine化です。
上記記事ではミクさんのAAがQuineになっています。
実行の際、自分自身を出力するのはもちろんですが、引数に画像のパスを渡した場合はその画像のQuineも生成してくれるみたいです。すごーい。
お借りして遊んでみます。


とある画像を引数に指定してQuineを出力してみようと思います。

































出力結果

eval$s=%w~



               require'zlib';g=Marshal.load(Zl
     ib::      Inflate              .inflate('eJyNkLFuAj
    EQRMdyh    FNE   nOiuQOED0lxJEeV+JfQUlHRnlIKSX9o u+Qp0EgVlL
   kpz   RNZN   1j5    D2qxk62m9Hs3s3f36yXzQ4n/lSdYR2l2NjlTq9idtfjbA8
   nH     PWAu    Uz/   NEtGVX/WhDf1WyAt/qQG5wMPLFnmzdi5Ge30pNb9sQSYb3ItOF
   Mx       lpd4    hz   F 9IbNXGiqvjoeYqjmoi           0bd0wkjQQYpId/9EZDzmEu
    5H        FfK    S+         QHlNiGWioE     GrlDUm3    qTWQq/XJLGND2lOCj2jymA
    hJs         vAm9   yE             z+s   NQKYO4m4rnV6   tumwr/AKJD4GP'.unpack
     ('m')[      0]));  h             ='   eval$s=%w'<<126  <<($s*4);i='';j=-1;3
     200.times{    |k|i<<(           g[k  ]==1?h[j+=1]:32)  ;i<<10if(k%80==79)};
      i[ -7,6]=''<<   126<<'         .jo  in';puts(i)#requ  ire'zlib';g=Marshal.
      loa  d(Zlib::Inflat   e         .i  nflate('eJyNkLFu  AjEQRMdyhFNEnOiuQOED
      0lx      JEeV+   Jf             QU   lHRnlIKSX9ou+Q  p0EgVlLkpzRNZN1j5D2qx
       k6                              2m9   Hs3s3f36yXz  Q4n/lSdYR2l2NjlTq9idtf
       jbA                               8nH             PWAu Uz/NEtGVX/WhDf1WyA
        t/                                 qQG5      wMPLFn      mzdi5Ge30pNb9sQ
        SY                                    b3ItOFMxl               pd4hzF9IbN
         XG                                                             iqvjoeYq
         jm                                                             oi0  bd0
          wk                                                           jQQY
          pI                                                           d/9
          EZD                                                      zmEu5HFfK
           S+                                                  QHlNiGWioEGrlDUm3
           qTW                                            Qq/XJLGND2lO
            Cj                                       2jymAhJsv
            Am9                                   yEz+sNQKYO4
             m4                                rnV6        tumw
             r/A                                              KJD4GP
              '.                                                 unpack('m
              ')[                                                      0]));h='e
               va                                                        l$s=%w'
               <<1                                                        26<<($
                s*                                                          4);i
              ='';j
       =-1;3200. tim
es{|k|i<<(g       [k                                                      ~.join


既視感



何に役立つという記事ではないですが、こういう遊びもあるよという紹介でした。

明日の担当はmatsuneko22さんです。

アイマスDBのAPIを使ってみる

アドベントカレンダー9日目の記事です。
adventar.org


内容はタイトルのとおりです。
THE IDOLM@STER データベースというサイトが掲載データを扱うAPIをまとめてくれていたので試しに使ってみようと思います。

THE IDOLM@STER データベース

imas-db.jp
非公式のファンサイトです。
アイドルの誕生日やイメージカラー、楽曲情報、ライブのセットリストなど、様々な情報を掲載しています。
ユーザー辞書なんかも公開してくれているのでIMEに登録しておくと便利ですね。

APIおためし

データ取得API - アイドルマスター データベース (情報まとめ)
このページに利用条件や注意事項等が載っています。
現在使用できるのはキャラクター、カレンダー、関連番組情報、関連Twitterアカウントの4つで、楽曲・CDデータは製作中のようです。


早速キャラクターの情報を取得してみたいと思います。
rubyですが特に意味は無いです。

require 'json'
require 'open-uri'
require 'pp'

keyword = ARGV.first
url = "http://api.imas-db.jp/character/lookup?name=#{keyword}"
idol = JSON.parse(open(URI.escape url).read)
pp idol


出力はこんな感じ。

f:id:hrys0121:20171209000842p:plain

氏名やふりがなはもちろん、誕生日や初出作品、担当声優さんまで出てきました。
用途は特に思いつかなかったので、ターミナルでアイドルの情報を眺めてニヤニヤするだけにしておきます。
何か思いついたら作るかもしれません。


明日の担当はu_yuzuponさんです。

Electronからツイートしてみる

www.adventar.org


アドベントカレンダー21日目の記事です。


ふとElectronを使ってイケイケなツイッタークライアントを作りたいという思いが湧いてきたため、以下の記事を参考にツイートするところまでやってみました。

qiita.com


electronの導入やtwitterAPIの扱いなどは上記の記事のままで問題ありません。
しかし、Electron ver1.0以降では細かいところで記法が変わっているため、書き換えなければならない場所を紹介しようと思います。


プロセス間通信を行うためのipcモジュールですが、ver1.0以前ではメインプロセス、レンダラプロセスともに

const ipc = require('ipc');

のように呼び出せばよかったのですが、ver1.0以降ではメインプロセスとレンダラプロセスでそれぞれ別のモジュールを呼び出す必要があります。
また、モジュールがelectronモジュール配下へ移動されているため、メインプロセスでは

const ipcMain = require( 'electron' ).ipcMain;


レンダラプロセスでは

const ipcRenderer = require( 'electron' ).ipcRenderer;

のように書く必要があります。


これらを踏まえて直した結果、


f:id:hrys0121:20161221194540j:plain
f:id:hrys0121:20161221194544j:plain

無事ツイートすることが出来ました。

追々機能を追加していきたいと思います。


明日の担当は2DorNot2D015さんです

Bash on Ubuntu on Windowsでmikutterが使いたかった

www.adventar.org
アドベントカレンダー7日目の記事です。


Bash on Ubuntu on Windows(以下BUW)でmikutterを使いたかったので、GUI環境の導入から実際にmikutterを起動するまでの流れを書いていきます。

BUWはXサーバを導入することでGUIアプリを起動できるようになります。今回は「VcXsrv」を導入し、BUW上でmikutterを使ってみようと思います。

VcXsrvの準備

インストールは以下のリンクからVcXsrvのインストーラをダウンロードして実行するだけです。

VcXsrv Windows X Server download | SourceForge.net

インストールが完了したらVcXsrvを起動しておきます。

X11のインストール

X11のアプリやライブラリをインストールしていきます

$ sudo apt-get install x11-apps


環境変数の追加

$ echo 'export DISPLAY=localhost:0.0' >> ~/.bashrc
$ source ~/.bashrc

ここまでで一応GUIアプリを起動できるようになるはず。


日本語表示が出来ない場合はunifontをインストールします。

$ sudo apt-get install unifont

mikutterのインストール

あとは通常通りmikutterをインストールするだけです。

$ sudo apt-get install mikutter


認証用にFireFoxのインストールもしておく。

$ sudo apt-get install firefox


コマンドを実行すればmikutterが起動します。

$ mikutter

f:id:hrys0121:20161206041159j:plain


ただ、日本語入力ができません。何か方法があれば教えてください。
明日の担当は誰かさんです。

仏説阿弥陀経
如是我聞。一時佛、在舎衛国祇樹給孤独園、与大比丘衆千二百五十人倶。皆是大阿羅漢、衆所知識、長老舎利弗・摩訶目○連・摩訶迦葉・摩訶迦旃延・摩訶倶○羅・離婆多・周利槃陀伽・難陀・阿難陀・羅○羅・○梵波提・賓頭盧頗羅堕・迦留陀夷・摩訶劫賓那・薄拘羅・阿○樓駄、如是等諸大弟子、并諸菩薩摩訶薩文殊師利法王子・阿逸多菩薩・乾陀訶提菩薩・常精進菩薩、与如是等諸大菩薩及釈提桓因等無量諸天大衆倶。
爾時佛告長老舎利弗、従是西方、過十萬億佛土有世界、名曰極楽。其土有佛、號阿彌陀。今現在説法。舎利弗、彼土何故名爲極楽。其国衆生、無有衆苦、但受諸樂、故名極楽。
舎利弗、極楽国土、七重欄楯、七重羅網、七重行樹。皆是四寶、周○囲繞。是故彼国名曰極楽。
舎利弗、極楽国土有七寶池、八功徳水、充満其中。池底純以金沙布地。四辺階道、金銀瑠璃玻○合成。上有楼閣、亦以金銀瑠璃玻○○○赤珠碼碯、而厳飾之。池中蓮華、大如車輪。青色青光、黄色黄光、赤色赤光、白色白光。微妙香潔。
舎利弗、極楽国土、成就如是功徳荘厳。
舎利弗、彼仏国土、常作天楽。黄金爲地、晝夜六時、而雨曼陀羅華。其国衆生、常以清旦、各以衣○、盛衆妙華、供養他方十萬億佛。即以食時、還到本国、飯食経行。舎利弗、極楽国土、成就如是功徳荘厳。
復次舎利弗、彼国常有種種奇妙雑色之鳥。白鵠・孔雀・鸚鵡・舎利・迦陵頻伽・共命之鳥。是諸衆生鳥、昼夜六時出和雅音。其音演暢五根・五力・七菩提分・八聖道分、如是等法。其土衆生、聞是音已、皆悉念佛念法念僧。舎利弗、汝勿謂此鳥實是罪報所生。
所以者何、彼佛国土、無三悪趣舎利弗、其佛国土、尚無三悪道之名、何況有實。是諸衆鳥、皆是阿彌陀佛、欲令法音宣流、変化所作。
舎利弗、彼佛国土、微風吹動諸宝行樹及宝羅網、出微妙音。譬如百千種楽同時倶作。聞是音者、皆自然生念佛・念法・念僧之心。舎利弗、是佛国土、成就如是功徳荘厳。
舎利弗、於汝意云何。彼佛何故號阿彌陀。舎利弗、彼佛光明無量、照十方国、無所障礙。是故號阿彌陀。又舎利弗、彼佛寿命及其人民、無量無辺阿僧祇劫。故名阿彌陀。
舎利弗、阿彌陀佛成佛已来、於今十劫。又舎利弗、彼佛有無量無辺声聞弟子、皆阿羅漢。非是算数之所能知。諸菩薩衆、亦復如是。舎利弗、彼佛国土、成就如是功徳荘厳。
舎利弗、極楽国土、衆生生者、皆是阿○跋致。其中多有一生補處、其数甚多。
非是算数所能知之。但可以無量無辺阿僧祇劫説。舎利弗衆生聞者、應當発願願生彼国。所以者何、得與如是諸上善人倶會一處。舎利弗、不可以少善根福徳因縁得生彼国。
舎利弗、若有善男子・善女人、聞説阿彌陀佛、執持名號、若一日、若二日、若三日、若四日、若五日、若六日、若七日、一心不乱、其人臨命終時、阿彌陀佛、與諸聖衆、現在其前。是人終時、心不顛倒、即得往生阿彌陀佛極楽国土。舎利弗、我見是利故説此言。若有衆生、聞是説者、應當発願生彼国土。
舎利弗、如我今者讃歎阿彌陀佛不可思議功徳、東方亦有阿○○仏・須弥相佛・大須弥佛・須弥光佛・妙音佛、如是等恒河沙数諸佛、各於其国、出廣長舌相、○覆三千大千世界、説誠實言。汝等衆生、當信是稱讃不可思議功徳、一切諸佛所護念経。
舎利弗、南方世界、有日月燈佛・名聞光佛・大焔肩佛・須弥燈佛・無量精進佛、如是等恒河沙数諸佛、各於其国、出廣長舌相、○覆三千大千世界、説誠實言。汝等衆生、當信是稱讃不可思議功徳、一切諸佛所護念経。
舎利弗、西方世界、有無量寿佛・無量相佛・無量幢佛・大光佛・大明佛・宝相佛・浄光佛、如是等恒河沙数諸佛、各於其国、出廣長舌相、○覆三千大千世界、説誠實言。汝等衆生、當信是稱讃不可思議功徳、一切諸佛所護念経。
舎利弗、北方世界、有焔肩佛・最勝音佛・難沮佛・日生佛・網明佛、如是等恒河沙数諸佛、各於其国、出廣長舌相、・覆三千大千世界、説誠實言。汝等衆生、當信是稱讃不可思議功徳、一切諸佛所護念経。
舎利弗、下方世界、有師子佛・名聞佛・名光佛・達摩佛・法幢佛・持法佛、如是等恒河沙数諸佛、各於其国、出廣長舌相、○覆三千大千世界、説誠實言。汝等衆生、當信是稱讃不可思議功徳、一切諸佛所護念経。
舎利弗、上方世界、有梵音佛・宿王佛・香上佛・香光佛・大焔肩佛・雑色宝華厳身佛・娑羅樹王佛・宝華徳佛・見一切義佛・如須弥山佛、如是等恒河沙数諸佛、各於其国、出廣長舌相、○覆三千大千世界、説誠實言。汝等衆生、當信是稱讃不可思議功徳、一切諸佛所護念経。
舎利弗、於汝意云何。何故名爲一切諸佛所護念経。舎利弗、若有善男子・善女人、聞是諸佛所説名及経名者、是諸善男子・善女人、皆爲一切諸佛共所護念、皆得不退転於阿耨多羅三藐三菩提。是故舎利弗、汝等皆當信受我語及諸佛所説。
舎利弗、若有人、已發願、今發願、當發願、欲生阿彌陀佛国者、是諸人等、皆得不退転於阿耨多羅三藐三菩提、於彼国土、若已生、若今生、若當生。是故舎利弗、諸善男子・善女人、若有信者、應當發願生彼国土。
舎利弗、如我今者稱讃諸佛不可思議功徳、彼諸佛等、亦稱説我不可思議功徳、而作是言。釋迦牟尼佛、能爲甚難希有之事、能於娑婆国土五濁悪世、劫濁・見濁・煩悩濁・衆生濁・命濁中、得阿耨多羅三藐三菩提、爲諸衆生、説是一切世間難信之法。舎利弗、當知、我於五濁悪世、行此難事、得阿耨多羅三藐三菩提、爲一切世間説此難信之法。是爲甚難。佛説此経已、舎利弗及諸比丘、一切世間天・人・阿修羅等、聞佛所説、歓喜信受、作禮而去。
南無阿弥陀仏
南無阿弥陀仏 南無阿弥陀仏
南無阿弥陀仏 南無阿弥陀仏
南無阿弥陀仏
願以此功徳 平等施一切
同発菩提心 往生安楽国

 

かくのごとく、われ聞きたてまつりき。

アイマス

アイドルマスター プラチナスターズが届きました。

PS4でアイマスが発売することが発表されてから3年くらい越しでの発売なので本当に楽しみで仕方がなかったです。

 

とりあえず色々と特典が付いているので適当に写真をあげてみます。

 

 

限定BOX外装

f:id:hrys0121:20160728143621j:plain

 

 

ソフマップ予約特典のB2タペストリ

f:id:hrys0121:20160728143619j:plain

 

 

 

ソフト

f:id:hrys0121:20160728143623j:plain

 

 

2016年1月に開催された「リスアニ!LIVE 2016」のライブ音源CD

f:id:hrys0121:20160728143624j:plain

 

 

ビジュアルカードとフォトフレーム

f:id:hrys0121:20160728143629j:plain

 

 

ライブパンフレット風冊子

f:id:hrys0121:20160728143626j:plain

 

 

カレンダー

f:id:hrys0121:20160728143639j:plain

 

 

またプレイ後にでもゲーム自体の感想書いてみようと思います。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

明日はテストです。