game.cgi - brcon2024-hackathons - Bitreichcon 2024 Hackathons | |
git clone git://bitreich.org/brcon2024-hackathons git://enlrupgkhuxnvlhsf6lc3fz… | |
Log | |
Files | |
Refs | |
Tags | |
Submodules | |
--- | |
game.cgi (2865B) | |
--- | |
1 #!/bin/sh | |
2 if [ -z "${QUERY_STRING}" ]; | |
3 then | |
4 printf "3Invalid Request\tErr\t%s\t%s\r\n" "${SERVER_NAME}" "${S… | |
5 exit | |
6 fi | |
7 | |
8 id="${QUERY_STRING#*:}" | |
9 type="${QUERY_STRING%%:*}" | |
10 | |
11 { | |
12 case "${type}" in | |
13 tuid ) | |
14 curl -sgG \ | |
15 --data-urlencode "id=${id}" \ | |
16 --url "https://ifdb.org/viewgame?ifiction" | |
17 ;; | |
18 ifid ) | |
19 curl -sgG \ | |
20 --data-urlencode "ifid=${id}" \ | |
21 --url "https://ifdb.org/viewgame?ifiction" | |
22 ;; | |
23 * ) | |
24 printf "3Invalid Request\tErr\t%s\t%s\r\n" "${SERVER_NAM… | |
25 exit 1 | |
26 ;; | |
27 esac | |
28 } | \ | |
29 xml2tsv | \ | |
30 awk ' | |
31 function fold(s) { | |
32 cmd = "fmt -w80" | |
33 printf("%s", s) | cmd | |
34 close(cmd); | |
35 } | |
36 BEGIN { | |
37 FS = "\t"; | |
38 } | |
39 $1 == "/viewgame/errorCode" { | |
40 exit | |
41 } | |
42 $1 == "/ifindex/story/bibliographic/description/br" { | |
43 bibliographic["description"] = bibliographic["description"] "\n\… | |
44 } | |
45 index($1, "/ifindex/story/bibliographic/description") == 1 { | |
46 bibliographic["description"] = bibliographic["description"] $2; | |
47 next; | |
48 } | |
49 index($1, "/ifindex/story/bibliographic/") == 1 { | |
50 bibliographic[substr($1, length("/ifindex/story/bibliographic/")… | |
51 next; | |
52 } | |
53 index($1, "/ifindex/story/contact/") == 1 { | |
54 contact[substr($1, length("/ifindex/story/contact/") + 1)] = $2; | |
55 next; | |
56 } | |
57 $1 == "/ifindex/story/ifdb/downloads/links/link" { | |
58 links["length"]++; | |
59 next; | |
60 } | |
61 index($1, "/ifindex/story/ifdb/downloads/links/link/") == 1 { | |
62 links[links["length"], substr($1, length("/ifindex/story/ifdb/do… | |
63 next; | |
64 } | |
65 index($1, "/ifindex/story/ifdb/") == 1 { | |
66 ifdb[substr($1, length("/ifindex/story/ifdb/") + 1)] = $2; | |
67 next; | |
68 } | |
69 END { | |
70 printf("%s\n", bibliographic["title"]) | |
71 printf("--------------------------------------------------------… | |
72 fold(sprintf("Author(s): %s", bibliographic["author"])); | |
73 if (bibliographic["genre"]) | |
74 printf("Genre: %s\n", bibliographic["genre"]); | |
75 if (bibliographic["language"]) | |
76 printf("Language: %s\n", bibliographic["language"]); | |
77 if (bibliographic["firstpublished"]) | |
78 printf("First Publication Date: %s\n", bibliographic["fi… | |
79 if (bibliographic["forgiveness"]) | |
80 printf("Forgiveness Rating: %s\n", bibliographic["forgiv… | |
81 if (contact["url"]) | |
82 printf("Website: %s\n", contact["url"]); | |
83 | |
84 if (ifdb["ratingCountAvg"]) | |
85 printf("Rating: %s stars (based on %s rating%s)\n", ifdb… | |
86 | |
87 if (bibliographic["description"]) { | |
88 printf("\nDescription:\n"); | |
89 fold(bibliographic["description"]) | |
90 } | |
91 | |
92 if (links["length"]) { | |
93 printf("\nDownloads:\n"); | |
94 for (i = 1; i <= links["length"]; i++) { | |
95 printf("%s\n", links[i, "title"]); | |
96 printf("\t%s\n", links[i, "url"]); | |
97 if (match(links[i, "url"], /^https?:\/\/(www\.)?… | |
98 printf("\t%s\n", "gopher://gopher.661.or… | |
99 printf("\n"); | |
100 } | |
101 } | |
102 }' |