include(config.m4)dnl #!__CMD_AWK__ -f # __CGIPATH__/details # # Show details for an item include(src/config.awk) incl(src/api.awk) incl(src/cache.awk) incl(src/cgi.awk) incl(src/sqlite.awk) incl(src/util.awk) incl(src/web.awk) function main( add_date, col, cols, cmd, creator, descr, dir, i, iaout, id, item_id, item_server, item_size, label, language, license, out, pub_date, scanner, sel, signature, str, thumb, title, topic, topics, type, uploader_account, uploader_email, uploader_name, url) { item_id = search signature = "details/" item_id str = cache_init(signature) if (length(str) > 0) { print str return } iaout = gettemp() out = cache_begin() url = api_endpoint "/metadata/" item_id api_request(url, "GET", iaout) # format search results as a gopher directory (menu) cmd = sprintf("%s <%s 2>&1", cmd_json2tsv, iaout) FS = "\t" cols = 0 delete col add_date = "" creators = 0 delete creator descr = "" dir = "" id = "" item_server = "" item_size = 0 language = "" license = "" pub_date = "" scanner = "" thumb = "" title = "" topics = 0 delete topic type = "" uploader_account = "" uploader_email = "" uploader_name = "Unknown" while ((cmd | getline) > 0) { if ($1 == ".dir" && $2 == "s") { dir = $3 } else if ($1 == ".files[].name" && $2 == "s") { if ($3 == "__ia_thumb.jpg") { thumb = $3 } } else if ($1 == ".item_size" && $2 == "n") { item_size = $3 } else if ($1 == ".metadata.addeddate" && $2 == "s") { added_date = $3 } else if ($1 == ".metadata.collection" && $2 == "s") { cols++ col[cols] = $3 } else if ($1 == ".metadata.collection[]" && $2 == "s") { cols++ col[cols] = $3 } else if ($1 == ".metadata.creator" && $2 == "s") { creators++ creator[creators] = $3 } else if ($1 == ".metadata.creator[]" && $2 == "s") { creators++ creator[creators] = $3 } else if ($1 == ".metadata.description" && $2 == "s") { descr = $3 } else if ($1 == ".metadata.identifier" && $2 == "s") { id = $3 } else if ($1 == ".metadata.language" && $2 == "s") { language = $3 } else if ($1 == ".metadata.license" && $2 == "s") { license = licenseurl[$3] } else if ($1 == ".metadata.mediatype" && $2 == "s") { type = $3 } else if ($1 == ".metadata.publicdate" && $2 == "s") { pub_date = $3 } else if ($1 == ".metadata.scanner" && $2 == "s") { scanner = $3 } else if ($1 == ".metadata.subject" && $2 == "s") { topics++ topic[topics] = $3 } else if ($1 == ".metadata.subject[]" && $2 == "s") { topics++ topic[topics] = $3 } else if ($1 == ".metadata.title" && $2 == "s") { title = $3 } else if ($1 == ".metadata.uploader" && $2 == "s") { uploader_email = $3 } else if ($1 == ".server" && $2 == "s") { item_server = $3 } } close(cmd) if (length(id) == 0) { print_not_found(out, url) cache_end() unlink(iaout) return } info(out, shorten(title, 70)) if (creators == 1) { label = "by " shorten(creator[1], 70) sel = sprintf("%s/search?creator:(%s)", cgipath, creator[1]) item(out, "1", label, sel, server, port) } else if (creators > 1) { info(out, "") info(out, "by:") for (i = 1; i <= creators; i++) { label = shorten(creator[i], 70) sel = sprintf("%s/search?creator:(%s)", cgipath, creator[i]) item(out, "1", label, sel, server, port) } info(out, "") } if (length(thumb) > 0) { url = sprintf("http://%s%s/%s", item_server, dir, thumb) sel = cgipath "/raw?" url item(out, "I", "Thumbnail", sel, server, port) } sel = cgipath "/download?" item_id item(out, "1", "Download", sel, server, port) sel = "URL:" api_ssl_endpoint "/details/" uri_encode(id) item(out, "h", "Web page", sel, server, port) info(out, "") print_html(out, descr) info(out, "") if (length(add_date) > 0) { info(out, sprintf("%-20s %s", "Date Added:", add_date)) } if (pub_date != add_date) { info(out, sprintf("%-20s %s", "Date Published:", pub_date)) } info(out, sprintf("%-20s %s", "Identifier:", id)) if (item_size > 0) { info(out, sprintf("%-20s %d", "Item Size:", item_size)) } if (length(language) > 0) { info(out, sprintf("%-20s %s", "Language:", language)) } if (length(license) > 0) { info(out, sprintf("%-20s %s", "License:", license)) } info(out, sprintf("%-20s %s", "Media Type:", type)) if (topics > 0) { info(out, "") info(out, "# Topics") for (i = 1; i <= topics; i++) { label = shorten(topic[i], 40) sel = sprintf("%s/search?subject:(%s)", cgipath, topic[i]) item(out, "1", label, sel, server, port) } } # scrape uploader name from item web page HTML url = api_ssl_endpoint "/details/" item_id api_request(url, "GET", iaout) while ((getline 0) { if (match($0, /item-upload-info__uploader-name/)) { if (match($0, /\/details\/[^"]*"/)) { uploader_account = substr($0, RSTART + 9, RLENGTH - 10) } else if (match($0, />[^<]*<\/span>/)) { uploader_name = substr($0, RSTART + 1, RLENGTH - 8) } } } close(iaout) if (cols > 0) { info(out, "") info(out, "# Collections") for (i = 1; i <= cols; i++) { label = shorten(col[i], 40) sel = sprintf("%s/search?collection:(%s)", cgipath, col[i]) item(out, "1", label, sel, server, port) } } info(out, "") info(out, "# Uploaded by") if (length(uploader_account) > 0) { label = shorten(uploader_account, 70) sel = sprintf("%s/account?%s/%s", cgipath, uploader_account, uploader_email) item(out, "1", label, sel, server, port) } else if (length(uploader_email) > 0) { label = shorten(uploader_email, 70) sel = cgipath "/search?uploader:" uploader_email item(out, "1", label, sel, server, port) } else { info(out, uploader_name) } info(out, "") info(out, "# Similar items") sel = cgipath "/search?similar:" item_id item(out, "1", "View similar items", sel, server, port) info(out, "") item(out, "1", "PHAROS", docpath, server, port) cache_end() unlink(iaout) return } BEGIN { config_init() uri_encode_init() cgi_init() main() }