Ruby - ThinReports でTweet一覧出力!

Updated:


先日は、我が「Ruby City MATSUE」の企業が開発した Ruby・Rails に特化した 帳票生成機能を実現するオープンソースソフトウェア「ThinReports」を試用してみた記事を書きました。

今回は以前、Ruby + Prawn で作成したTwitter の自分のツイート一覧を作成するスクリプトを、 Ruby + ThinReports に変更してみました。

帳票デザイン

ThinReports Editor を使用して帳票のデザインを行います。 今回作成したデザインは以下のとおり。 【ファイル名:tweet_list.tlf】

THINREPORTS_TWEETLIST_DESIGN

Ruby スクリプト

今回作成した Ruby スクリプトの PDF 作成部分の抜粋です。 DB(MySQL)に保存してあるデータを取得する部分等の掲載は割愛しています。


#### [START] PDF作成処理 ####

# 作成するPDFファイル名
pdf_file = 'TweetList_' + date_f + "-" + date_t + '.pdf'

ThinReports::Report.generate_file( pdf_file ) do
  use_layout 'tweet_list.tlf'

  # ヘッダ
  events.on :page_create do |e|
    # 日付
    e.page.item( :date_from ).value( date_f[0,4] + "/" + date_f[4,2] + "/" + date_f[6,2] )
    e.page.item( :date_to   ).value( date_t[0,4] + "/" + date_t[4,2] + "/" + date_t[6,2] )
    # ページ番号
    e.page.item( :page ).value( e.page.no )
  end

  # 総ページ数
  events.on :generate do |e|
    e.pages.each do |page|
      page.item( :page_total ).value( e.report.page_count )
    end
  end

  # ページ作成
  start_new_page

  # 取得データ分ループ
  res.each do |data|

    tweet_time = Time.parse( data[2].to_s ).strftime( "%Y/%m/%d %H:%M:%S" ) # Linux対応
    page.list( :tweet_list ).add_row do |row|
      row.item( :datetime ).value( tweet_time )
      row.item( :tweet_id ).value( "ID[ #{data[0].to_s} ]" )
      row.item( :source   ).value( "Source[ #{Sanitize.clean(data[3].to_s)} ]" )
      row.item( :detail   ).value( "#{Kconv.toutf8( data[1].to_s )}" )
    end

  end

end

#### [E N D] PDF作成処理 ####

生成される PDF

上記の Ruby スクリプトで生成される PDF です。

THINREPORTS_TWEETLIST_PDF

綺麗にできました。

Prawn を使用した場合に生成される PDF

比較のため、以前 Ruby + Prawn で作成した PDF が以下。

PRAWN_TWEETLIST_PDF

問題点等

  • PDF は簡単綺麗に生成されたのですが、今回の帳票のような場合、リスト内の各行は高さが異なる(行数がまちまち)ので、それぞれの行の高さ(行数)に合わせて DETAIL の高さが自動で調整されるとうれしい。
  • もっと複雑な帳票を作成するには Prawn の方がよいかも?

という訳で、今回は上記1の理由により、Twitter の自分のツイート一覧は当面は Ruby + Prawn で行こうと思います。 (行の高さが自動で調整されるようになったら ThinReports を使用することにします)


以上。





 

Sponsored Link

 

Comments