用 Scala 在 V2EX 做抽奖活动

2018-10-09 20:17:00 +08:00
 sadhen

准备活动,安装 Ammonite。

brew install ammonite-repl

或者按照 Ammonite 官网的命令行一键安装。用 brew 需要科学上网请在前面加 ALL_PROXY=socks5://localhost:1080

抽奖代码很简单:

import $ivy.`com.lihaoyi::requests:0.1.4`
import $ivy.`org.json4s::json4s-jackson:3.5.2`
import org.json4s.jackson.JsonMethods.parse
import org.json4s._
import org.json4s.JsonDSL._
import scala.util.Random

// 一些常量
val url = "https://www.v2ex.com/api/replies/show.json?topic_id=493356"
val numberOfWinners = 6

// 从 V2EX 获取数据
val source = requests.get(url)

// 解析 JSON,获取所有参与抽奖的用户
implicit val formats = DefaultFormats
val json = parse(source.text)
case class Profile(username: String, github: String)
case class Member(member: Profile)
val members = json.extract[List[Member]].map(_.member.username).distinct

// 抽奖
Random.shuffle(members).take(numberOfWinners)

关于 JSON4S 的几点上手建议

https://github.com/sadhen/12-technologies-in-2017/tree/master/05-json4s-in-15min

比较笨,每次用都会查看自己写的这篇小文章。

大家要抽取内容的时候,建议用case class,不要用\\\,反正我觉得后者看得我头疼,代码也不那么友好。

一次性的话,怎么顺手怎么用,搭配 Ammonite,还是贼爽贼爽的。

694 次点击
所在节点    程序员
2 条回复
sadhen
2018-10-09 20:19:07 +08:00
额 手贱发在问与答了
yishenggudou
2018-10-09 22:17:39 +08:00
JSON4S 还是很难用 fastjson 好用很多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/496092

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX