write the program
This commit is contained in:
parent
9524ec33f3
commit
2db6448e78
10
README.md
10
README.md
@ -1,3 +1,13 @@
|
|||||||
# mhwnews
|
# mhwnews
|
||||||
|
|
||||||
Script to convert Monster Hunter World's news.json into an RSS feed
|
Script to convert Monster Hunter World's news.json into an RSS feed
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- lua
|
||||||
|
- lua-cjson
|
||||||
|
- curl
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
lua mhwnews.lua output.rss.xml
|
||||||
|
55
mhwnews.lua
Normal file
55
mhwnews.lua
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env lua
|
||||||
|
local json = require "cjson"
|
||||||
|
local tA = {...}
|
||||||
|
|
||||||
|
local mhwurl = tA[2] or "https://www.monsterhunter.com/world-iceborne/pc/assets/data/us/news.json"
|
||||||
|
local title = "Unofficial Monster Hunter World News"
|
||||||
|
local jsf = os.tmpname()
|
||||||
|
os.execute(string.format("curl -so '%s' '%s'",jsf,mhwurl))
|
||||||
|
local f = io.open(jsf,"rb")
|
||||||
|
if not f then error("unable to open file for reading: "..jsf) end
|
||||||
|
local c = f:read("*a")
|
||||||
|
f:close()
|
||||||
|
os.execute(string.format("rm '%s'",jsf))
|
||||||
|
local jt = json.decode(c)
|
||||||
|
local f = io.open(tA[1],"wb")
|
||||||
|
if not f then error("unable to open file for writing: "..tA[1]) end
|
||||||
|
f:write(string.format([[<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<rss version="2.0">
|
||||||
|
<channel>
|
||||||
|
<title>%s</title>
|
||||||
|
<link>https://www.monsterhunter.com/world-iceborne/pc/us/</link>
|
||||||
|
<lastBuildDate>%s</lastBuildDate>
|
||||||
|
<ttl>1440</ttl>
|
||||||
|
]], title, os.date("%a, %d %b %Y %H:%M:%S %z")))
|
||||||
|
for k,v in pairs(jt.topics) do
|
||||||
|
if v.link:sub(1,8) ~= "https://" then
|
||||||
|
v.link = "https://www.monsterhunter.com/" .. v.link
|
||||||
|
end
|
||||||
|
local p = io.popen(string.format("curl -sI '%s' | grep last-modified",v.link))
|
||||||
|
local c = p:read("*a")
|
||||||
|
p:close()
|
||||||
|
mdate = c:match(": ([^\r\n]+)")
|
||||||
|
if mdate then
|
||||||
|
f:write(string.format([[ <item>
|
||||||
|
<title>%s</title>
|
||||||
|
<description><img src="https://www.monsterhunter.com/world-iceborne/pc/%s"></img></description>
|
||||||
|
<link>%s</link>
|
||||||
|
<guid>%s</guid>
|
||||||
|
<pubDate>%s</pubDate>
|
||||||
|
</item>
|
||||||
|
]], v.text, v.img, v.link, v.link, mdate))
|
||||||
|
else
|
||||||
|
f:write(string.format([[ <item>
|
||||||
|
<title>%s</title>
|
||||||
|
<description><img src="https://www.monsterhunter.com/world-iceborne/pc/%s"></img></description>
|
||||||
|
<link>%s</link>
|
||||||
|
<guid>%s</guid>
|
||||||
|
</item>
|
||||||
|
]], v.text, v.img, v.link, v.link))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
f:write([[</channel>
|
||||||
|
</rss>]])
|
||||||
|
f:close()
|
Loading…
Reference in New Issue
Block a user