iT邦幫忙

DAY 23
3

建立API為中心的輕量級網站系列 第 23

以 sinatra + redis 改良實作夢幻筆名

用 Sinatra 實作簡單的夢幻筆名 API 這一篇,
每次query原網站來回應的方式,有點辛苦了原網站,
所以改良成,也可存在自己的 redis 裡,
而從自己的網站來查詢。
這次改良的目標是,
平常存取夢幻筆名在自己的redis,
若覺得自己存的筆名不夠多,再向原網站抓一些回來。

先做一個摘要目前本地存有多少筆名,
就是計算novelname裡有多少個元素。

def summary
  nnames = ($redis.scard 'novelname')
  "本地夢幻筆名有 #{nnames} 筆"
end

而原來存取原筆名網站的程式,
本來是直接回應,而改為存到redis裡,
而每次存取的筆名可能會有重覆,
存在集合裡就不用管重覆的問題。

def more_novel_name
  url = "http://www.richyli.com/name/novel.asp"
  body = get_utf8_body(url)
  names = (body.split("\r\n")[52]).strip.gsub(/。/,'').split('、')
  names.each{|n| push_to_sets('novelname', n)}
  return names
end

什麼是 push_to_sets?

  def push_to_sets(key,value)
    $redis.sadd key,value
  end

只是把值加到redis的key裡。

而要查取筆名,改為從本地的redis來抓,
並且可指定抓幾個,每次都重新排列抓取
沒指定就只抓五個:

def rand_novelname(n=5)
  ($redis.smembers 'novelname').shuffle[0..n-1]
end

系列文章列表


上一篇
以 knockout.js 實作猜拳遊戲 (有game喔…)
下一篇
加上 knockout.js 的夢幻筆名
系列文
建立API為中心的輕量級網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

我要留言

立即登入留言