2015年11月22日日曜日

ruby-rss

とりあえず標準であるrssっての使ってparseしてみる。
まぁゴミのように大量のデータが取れるんだけど、このままだとよく分からんので、手作業で分けてった。
つまり私がやろうとしてることに必要なのだけ取り出すと
  • RSS::Atom::Feed (そのサイトの情報)
    • title
    • author
    • link[2] (そのサイトにあるurl、配列形式、そのサイト自体のurl欲しいんだけど、順番が謎)
    • entry (記事、配列形式)
      • content (記事の中身body)
      • published (公開日時かな?)
      • title
      • updated (publishedだけでいいか)
      • author (配列形式、まぁ要らないといえば要らない)
      • link[4] (その記事のurl、配列形式、これも順番謎、titleが記事のtitleと一致してるかな)
かな。
とりあえず確認で
rss = RSS::Parser.parse(url)

p rss.title.content
p rss.authors[0].name.content
p rss.links[2].href

p rss.entries[1].title.content
p rss.entries[1].content.content
p rss.entries[1].updated.content
p rss.entries[1].published.content
p rss.entries[1].authors[0].name.content
p rss.entries[1].links[4].href

=> "名称未設定のブログ"
=> "iaia"
=> "http://iaiaie.blogspot.com/"

=> "github"
=> 割愛
=> 2015-11-19 23:27:42 +0900
=> 2015-11-19 23:27:00 +0900
=> "iaia"
=> "http://iaiaie.blogspot.com/2015/11/github.html"
こんな感じで取れるかな。まぁ普通にentriesはeachで回す。別にcontentってやらなくても.to_sでcontent部分を吐き出してくれるんだけど、htmlのタグがくっついてくるので辞めた。 まぁauthorとか要らんな。updatedも要らないかな。 記事のurlはtitleと一致してるものを取るように書いて、ってすれば良いかなぁ。

なんかsubtitleとかcategoryとか見えたんだけど、とりあえず無視無視で後で必要であれば戻る感じで。

ただ、自分ところのしか見てないのでこれが他でも通用するのか謎

2015年11月20日金曜日

タグ付きのテストです

rubyとかrailsとかタグつけた記事でどうなるのか見るテスト

2015年11月19日木曜日

github

blog書きながら寝てた...。昨日分です。

最近というか今週来週辺りは忙しいのでちょっと開発無理だな。23時帰宅が当たり前になってしまう。ホントに一人キツイ。

git使ってないのであんまり分かんないんだよね。

置いときました。https://github.com/iaia/rss-reader

つまりまぁrss-readerやります。まだ何も作ってないので。

とりあえずpush先指定しといて、commitでテストしといたのでgithub関連大丈夫そうかな。
なんかwarning出てた気がするけど...。

構想何も練ってないので、ほぼ0からだな。とりあえずイメージとしてはfeedlyで良いです。

railsの勉強パート2ってことで。何か本欲しいけど分からんなー。

なんで作りたいかというと、まぁあんまりfeedlyに良いイメージないんだよな。
adblockで弾かれたり弾かれなかったりよく分からんし。前は止まったりしてることあったけど最近は安定してるか。

というよりまぁ自分が使ってるサービスは自分で作って自分で使おうという考え。

rails系で触ることはまだなさそうだな。先に普通のrbでfeed取ったりするテストやらんと話にならない。

機能でなんとなく分かるのは

  • OPML形式のimport/export機能
  • Read it Later機能
  • articleを一行ずつで表示する画面
  • 各行選択すると概要?表示
  • 選択されると未読は既読フラグを立てとく -> どこかのタイミングでdbにupdate
  • タイミングは画面開いてる状態で1分間隔とか?
  • それ以外にもどこかページ遷移すればupdate
  • ページ表示時にfeed取得
  • 1時間に1回feed取得?

かなぁ。

テーブルは

  • user
    • id
    • name
    • password
  • category
    • id
    • name
  • site
    • id
    • name
    • category_id
    • user_id
  • article
    • id
    • title
    • body (概要?)
    • time(created_atで十分)
    • site_id
    • read (未読flag)

かなぁ。

画面は1個で十分(viewは1個)かと。controller側でカテゴリ選択されたら、categoryに属するsiteのarticle取り出し。siteが選択されたらsiteに属するarticle取り出し。って感じでいけるな。まぁ最終的に出てくるのはarticleだな。

おっと、viewは概要部分もあったか。差し込めるような形式にしておいて_body.html.erbとかで作れば良いんじゃね感。

2015年11月15日日曜日

railsの続き

ドツボにハマる。結構ハマるというか勘違い多くて。
  1. ajaxが動かなくてどうも普通の画面遷移になる
これが全くわからなくてずっと悶々としてたんだけど、railsのjquery読んでないからだった。 というのもsinatraで書いてた時にjqueryを引っ張ってきてた名残で、こっちにもそのjqueryを引っ張ってた。デフォルトでrailsのjqueryが入っていて、なんか挙動がおかしいなと思ったのでデフォルトの方消してたというタコいミス。 formタグのdata-remote="true"って書き方だけでどうしてajaxが動くのか考えれば分かることなんだけどなぁ。
で、デフォルトだけの方で挙動がおかしかったのはjsの読み込みのタイミングの問題だったのか?って感じでちゃんと意識して書いたら動いてたのでまぁ良しとしよう。納得出来ないけど。
  1. js, cssの扱い勘違い
railsからconfig/initializers/asssets.rbに書けって言われたのでその通りにしてたけど、これ全部の画面で読み込んでるじゃんという。結局public/配下において、viewで普通に呼び出すだけで良いらしい。なんでこんなめんどくさいんだとは思った。
  1. テーブルの参照
例えばbookテーブルにauthor_idがあって、authorテーブルのidとauthor_idでパっとauthorテーブルの中身出したいんだけど、関連付けできねーの?って問題。
@book = Book.find(1) Author.find(@book.author_id)
みたいなの毎回書けって?って感じ。bookとauthorの関係分かりづらいし。(そうでもないか) 絶対にこの辺は簡単にやれるようになってるはずなんだよなぁ〜と、思ったらbelongs_toとhas_manyを使えばいいみたいな話が。 つまりこれで
` @book.author
だけでauthor参照できる。Bookのmodelにbelongs_toでauthor登録しておいて(Authorにはhas_manyをつける)、.authorつけるとAuthor.where(id: @book.author_id)をしてくれる。実際.authorつけるタイミングでselect文発行してるっぽいし。これだと圧倒的に分かりやすい。違和感はあるけど。
違和感は「本が所有してる著者」っぽい感じがして逆なんじゃないか感すごいんだよな。@author.bookだと「著者が所有している(書いた)本」で全く違和感ない。こっちの設計おかしいのか理解がおかしいのかどっちもなのか。
一応、[model名]_idがデフォルトの規則らしいけど、modelにforeign_keyとか設定してあげると好き放題な名前がつけられるらしい。そっちもちょっと後でやらないといけないんだけど。ちなみにauthor_idとanother_author_idみたいな感じでやろうとしたら、どうも後のほうのみAuthorのidが入るらしくてそれもハマった。
  1. 配列のidで取り出し?
さっきのbook, authorの例で言うとauthorが複数マッチしてAuthorの配列の帰ってくる状況。 この複数のauthorにマッチするBookを取り出したいがどうするか?
@author.each do |a| @book << Book.where(author_id: a.id) ` end
を、最初思い浮かべたんだけど、これだとRelationにならなくて@bookに対して更に.where()とか使えない。第一ダサい。
後で気づいたけどin句で出せば良いんだよなって感じではあるんだけど、それのrailsでの実現方法がわからなかった。 ググってたらmapでやってる人いたけどそんなバカなwだったんだけど、つまりはfindやwhereに配列で渡すとin句にしてくれるので、mapじゃなくてpluck()ってので配列作って渡せということらしい。
` @book = Book.where(author_id: @author.pluck(:id))
で、"select * from books where author_id in (1,2,3,4)"みたいな一文で済ましてくれる。
  1. formのactionのid
    1. formから"post /search" に飛ぶ。
    2. ページをリンクから移動して"get /search/2?keyword=hoge" に行く
    3. 再度formから"post /search"に飛ぶ
をすると飛び先が"post /search/2"になっている。form_tag action: "search"ってやってるとidも拾って作るらしい。form_tag "/search"って明記してとりあえず解決。
って感じで一通りは機能問題なしかな。 後はチョロチョロ勉強してrailsに合った書き方をもうちょい落とし込みたい。

シンボルの書き方がなぁ。最初「:key => "value"」だろって思ってたんだけど、「key: value」の方がさっと書けていいか。

2015年11月8日日曜日

rails

rails勉強中。

勉強って言っても前にsinatraで作ってたやつをrailsに書き換えてるだけなんだけど。まぁrailsそろそろやっておかないととは思ってたし。

sinatraと比べちゃうとあっちこっちにファイルが散乱してるので修正しづらい。

ちょこちょこ引っかかってて、javascript読み込まねーぞとか、ちゃんとあるのにNoMethodErrorとか。手順や規則に則らないなら死ねってポジションなのね。

便利な機能提供されてるのは分かるんだけど、だるい。書き換えるだけだしまぁイケるだろって思ってたのがダメだったな。なんか廃止されてるメソッドがドキュメント載ってたりして騙されたりするし。

いやまぁでも楽な部分も多いか。現状とにかく動けばいいで作ってるので、かなりviewとか汚い。とりあえずで一通りの機能を書き換えたら、railsらしい書き方に変えるつもりで。