class Tumblr4r::XMLParser
Tumblr XML API
Public Instance Methods
answer(post, rexml_post)
click to toggle source
# File lib/tumblr4r.rb, line 627 def answer(post, rexml_post) post = self.post(post, rexml_post) post.question = rexml_post.elements["question"].try(:text) || "" post.answer = rexml_post.elements["answer"].try(:text) || "" post end
audio(post, rexml_post)
click to toggle source
# File lib/tumblr4r.rb, line 611 def audio(post, rexml_post) post = self.post(post, rexml_post) post.audio_plays = (rexml_post.attributes["audio-plays"] == "1") post.audio_caption = rexml_post.elements["audio-caption"].try(:text) || "" post.audio_player = rexml_post.elements["audio-player"].try(:text) || "" post end
chat(post, rexml_post)
click to toggle source
# File lib/tumblr4r.rb, line 604 def chat(post, rexml_post) post = self.post(post, rexml_post) post.conversation_title = rexml_post.elements["conversation-title"].try(:text) || "" post.conversation_text = rexml_post.elements["conversation-text"].try(:text) || "" post end
link(post, rexml_post)
click to toggle source
# File lib/tumblr4r.rb, line 596 def link(post, rexml_post) post = self.post(post, rexml_post) post.link_text = rexml_post.elements["link-text"].try(:text) || "" post.link_url = rexml_post.elements["link-url"].try(:text) || "" post.link_description = rexml_post.elements["link-description"].try(:text) || "" post end
photo(post, rexml_post)
click to toggle source
# File lib/tumblr4r.rb, line 576 def photo(post, rexml_post) post = self.post(post, rexml_post) post.type post.photo_caption = rexml_post.elements["photo-caption"].try(:text) || "" post.photo_link_url = rexml_post.elements["photo-link-url"].try(:text) || "" post.photo_url = rexml_post.elements["photo-url"].try(:text) || "" post.photoset = [] rexml_post.elements.each("photoset/photo") do |photo| post.photoset.push(photo.elements["photo-url"].try(:text) || "") end post end
post(post, rexml_post)
click to toggle source
TODO: この辺りの設計についてはもう少し考慮の余地がある? みんな同じような構造(まずはpost(post, rexml_post)呼んでその後独自処理)してるし、 引数にpostとrexml_postをもらってくるってのもなんかイケてない気がする。
# File lib/tumblr4r.rb, line 552 def post(post, rexml_post) post.post_id = rexml_post.attributes["id"].to_i post.url = rexml_post.attributes["url"] post.url_with_slug = rexml_post.attributes["url-with-slug"] post.liked = (rexml_post.attributes["liked"] == "true") post.reblog_key = rexml_post.attributes["reblog-key"] post.type = rexml_post.attributes["type"] # TODO: time 関係の型をStringじゃなくTimeとかにする? post.date_gmt = rexml_post.attributes["date-gmt"] post.date = rexml_post.attributes["date"] post.unix_timestamp = rexml_post.attributes["unix-timestamp"].to_i post.format = rexml_post.attributes["format"] post.tags = rexml_post.get_elements("tag").map(&:text) post.bookmarklet = (rexml_post.attributes["bookmarklet"] == "true") post end
posts(xml)
click to toggle source
XMLをパースしてオブジェクトのArrayを作る @param [String] xml APIからのレスポンス全体 @return [Array<Post>, Integer, Integer] 各種Postの子クラスのArray, start, total
# File lib/tumblr4r.rb, line 515 def posts(xml) rexml_doc = REXML::Document.new(xml) rexml_posts = REXML::XPath.first(rexml_doc, "//tumblr/posts") start = rexml_posts.attributes["start"] total = rexml_posts.attributes["total"] posts = [] rexml_posts.elements.each("//posts/post") do |rexml_post| post_type = rexml_post.attributes["type"] post = nil case post_type when POST_TYPE::REGULAR post = self.regular(Regular.new, rexml_post) when POST_TYPE::PHOTO post = self.photo(Photo.new, rexml_post) when POST_TYPE::QUOTE post = self.quote(Quote.new, rexml_post) when POST_TYPE::LINK post = self.link(Link.new, rexml_post) when POST_TYPE::CHAT post = self.chat(Chat.new, rexml_post) when POST_TYPE::AUDIO post = self.audio(Audio.new, rexml_post) when POST_TYPE::VIDEO post = self.video(Video.new, rexml_post) when POST_TYPE::ANSWER post = self.answer(Answer.new, rexml_post) else raise TumblrError.new("unknown post type #{post_type}") end posts << post end return posts, start.to_i, total.to_i end
quote(post, rexml_post)
click to toggle source
# File lib/tumblr4r.rb, line 589 def quote(post, rexml_post) post = self.post(post, rexml_post) post.quote_text = rexml_post.elements["quote-text"].try(:text) || "" post.quote_source = rexml_post.elements["quote-source"].try(:text) || "" post end
regular(post, rexml_post)
click to toggle source
# File lib/tumblr4r.rb, line 569 def regular(post, rexml_post) post = self.post(post, rexml_post) post.regular_title = rexml_post.elements["regular-title"].try(:text) || "" post.regular_body = rexml_post.elements["regular-body"].try(:text) || "" post end
siteinfo(site, xml)
click to toggle source
@param [Site] site xmlをパースした結果を埋める入れ物 @param [String] xml TumblrAPIのレスポンスのXMLそのまま
# File lib/tumblr4r.rb, line 499 def siteinfo(site, xml) xml_doc = REXML::Document.new(xml) tumblelog = REXML::XPath.first(xml_doc, "//tumblr/tumblelog") site.name = tumblelog.attributes["name"] site.timezone = tumblelog.attributes["timezone"] site.title = tumblelog.attributes["title"] site.cname = tumblelog.attributes["cname"] site.description = tumblelog.text # tumblelog.elements["/feeds"]} # TODO: feeds は後回し return site end
video(post, rexml_post)
click to toggle source
# File lib/tumblr4r.rb, line 619 def video(post, rexml_post) post = self.post(post, rexml_post) post.video_caption = rexml_post.elements["video-caption"].try(:text) || "" post.video_source = rexml_post.elements["video-source"].try(:text) || "" post.video_player = rexml_post.elements["video-player"].try(:text) || "" post end