- ベストアンサー
RSS::Parserで要素と文字列を連結する方法
- RSS::Parserを使用して取り出した要素と文字列を連結する方法について教えてください。
- サンプルコードを改造した際にエラーが発生し、要素の連結方法がわからなくなってしまいました。
- 最終的には要素をHTML形式で連結し、変数に格納したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Rubyは型(オブジェクトのクラス)に厳しい言語なので、演算子・メソッドにデータを渡すときには型がなんであるかを意識しないといけません。 ライブラリのメソッドが返すオブジェクト型についてはドキュメントに記述があるはずです。もし無い場合は、puts xxxx.class などを挿入してみてクラス名を確認します。 修正点は下記。 rss.items.each do |i| titles.push(i.title)#pushは配列に要素を加えると言う意味 links.push(i.link) dates.push(i.date.strftime("%Y/%m/%d")) end
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
joinは、StringからなるArrayをつなぎ合わせてStringにするメソッドなので、あなたがしようとしている用途には合いません。 Stringを繋ぎたいみたいなので、+ で良さそうですが。 >【+】にしてみたり色々試してみましたがうまくいきませんでした。 どのように書いてどのようになったのですか?
お礼
早速のご回答ありがとうございます! >どのように書いてどのようになったのですか? 以下のようにしてみました。 ------------------------------------------- # -* coding: Shift_JIS -*- ENTRIES = 5 require 'uri' require 'open-uri' require 'rss' uri = URI.parse('http://dtm-web-etc.seesaa.net/index20.rdf') rss = RSS::Parser.parse(uri.read) rss.output_encoding = 'Shift_JIS' titles = [] links = [] dates = []#空の配列を生成 rssdata = "" rss.items.each do |i| titles.push([i.title])#pushは配列に要素を加えると言う意味 links.push([i.link]) dates.push([i.date]) end puts "\n\n" for i in 0...5 rssdata += (dates[i]) + ("<a href='") + (links[i]) + ("'>") + (titles[i]) + ("</a>") + ("\n") end puts "\n\n" puts rssdata ------------------------------------------- エラーメッセージです。 ------------------------------------------- 27:in `+': can't convert String into Array (TypeError) from rss.rb:27 from rss.rb:26:in `each' from rss.rb:26 ------------------------------------------- rdfから取り出したdates[i]などの値は 文字列ではないということでしょうか? 初歩的な質問でお手数をおかけしますが ヒントがありましたら是非お願い致します。
お礼
ご回答ありがとうございます! ご指摘の通り修正したらすんなりできました。 初歩的なことで、恐縮です。 puts xxxx.class ↑このメソッドで確認したところ (i.link):String ([i.link]):Array i.date:Time と確認できました! ありがとうございます! 勉強になりました!