{"id":4812,"date":"2016-07-28T03:29:19","date_gmt":"2016-07-28T03:29:19","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=4812"},"modified":"2016-07-28T03:29:19","modified_gmt":"2016-07-28T03:29:19","slug":"access-opencalais-node-js","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/","title":{"rendered":"Access OpenCalais from Node.js"},"content":{"rendered":"<p>To access OpenCalais for entity recognition, you&#8217;ll need an API key, and some text to check:<\/p>\n<pre lang=\"javascript\">\nlet inputData = `\nProfessor Sir Richard Evans FBA is Provost of Gresham College and \nthe President of Wolfson College, Cambridge. He was Regius Professor \nof History at the University of Cambridge from 2008 until his retirement \nin September 2014. He is a world-renowned historian and academic, with \nmany of his books now acknowledged as seminal works in the field of \nmodern history.`;\n\nlet token = 'insert token here';\n<\/pre>\n<p>This requires the Node HTTPs library as a dependency (there are a couple unmaintained wrappers around OpenCalais for Node, but I found none of them work).<\/p>\n<pre lang=\"javascript\">\nlet https = require('https');\n<\/pre>\n<p>Once you do this, you just need to drop in all the parameters you need, and run a typical Node HTTP request:<\/p>\n<pre lang=\"javascript\">\nconst options = {\n  host: \"api.thomsonreuters.com\",\n  port: \"443\",\n  path: \"\/permid\/calais\",\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"text\/raw\",\n    \"OutputFormat\": \"application\/json\",\n    \"X-AG-Access-Token\": token,\n    \"Content-Length\": new Buffer(inputData).length\n  }\n};\n\nconst req = https.request(options, \n  (res) => {\n    let resultData = \"\";\n    res.on(\"data\", (d) => {\n      resultData += d;\n    });\n\n    res.on(\"end\", () => {\n      console.log(\n        JSON.stringify(\n          JSON.parse(resultData), \n          null, \n          2));\n    });\n  }\n);\n\nreq.write(inputData);\nreq.end();\n<\/pre>\n<p>Once you do this, you&#8217;ll get a ton of detail (on first glance, this seems much more detailed than AlchemyAPI):<\/p>\n<pre lang=\"javascript\">\n  },\n  \"http:\/\/d.opencalais.com\/genericHasher-1\/8ab44b93-7601-3ce8-8b45-1bc2fa919150\": {\n    \"_typeGroup\": \"relations\",\n    \"_type\": \"Trial\",\n    \"forenduserdisplay\": \"false\",\n    \"_typeReference\": \"http:\/\/s.opencalais.com\/1\/type\/em\/r\/Trial\",\n    \"person\": \"http:\/\/d.opencalais.com\/pershash-1\/9af3227d-8f35-3529-8222-cc89ff24185a\",\n    \"instances\": [\n      {\n        \"detection\": \"[About Hitler: The Holocaust, History, and the ]David Irving Trial[ (2002), In Defe\nnce of History (1997), Rituals of]\",\n        \"prefix\": \"About Hitler: The Holocaust, History, and the \",\n        \"exact\": \"David Irving Trial\",\n        \"suffix\": \" (2002), In Defence of History (1997), Rituals of\",\n        \"offset\": 1742,\n        \"length\": 18\n      }\n    ]\n  },\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Accessing OpenCalais from Node.js<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[4],"tags":[385,388,406],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"Accessing OpenCalais from Node.js\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"gary\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Gary Sieling - Software Engineer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Access OpenCalais from Node.js - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"Accessing OpenCalais from Node.js\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2016-07-28T03:29:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2016-07-28T03:29:19+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Access OpenCalais from Node.js - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Accessing OpenCalais from Node.js\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/access-opencalais-node-js\\\/#blogposting\",\"name\":\"Access OpenCalais from Node.js - Gary Sieling\",\"headline\":\"Access OpenCalais from Node.js\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2016-07-28T03:29:19+00:00\",\"dateModified\":\"2016-07-28T03:29:19+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/access-opencalais-node-js\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/access-opencalais-node-js\\\/#webpage\"},\"articleSection\":\"Code Examples, nlp, node.js, opencalais\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/access-opencalais-node-js\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"position\":2,\"name\":\"Code Examples\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/access-opencalais-node-js\\\/#listItem\",\"name\":\"Access OpenCalais from Node.js\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/access-opencalais-node-js\\\/#listItem\",\"position\":3,\"name\":\"Access OpenCalais from Node.js\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/\",\"name\":\"gary\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/access-opencalais-node-js\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"gary\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/access-opencalais-node-js\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/access-opencalais-node-js\\\/\",\"name\":\"Access OpenCalais from Node.js - Gary Sieling\",\"description\":\"Accessing OpenCalais from Node.js\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/access-opencalais-node-js\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2016-07-28T03:29:19+00:00\",\"dateModified\":\"2016-07-28T03:29:19+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Access OpenCalais from Node.js - Gary Sieling","description":"Accessing OpenCalais from Node.js","canonical_url":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/#blogposting","name":"Access OpenCalais from Node.js - Gary Sieling","headline":"Access OpenCalais from Node.js","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2016-07-28T03:29:19+00:00","dateModified":"2016-07-28T03:29:19+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/#webpage"},"articleSection":"Code Examples, nlp, node.js, opencalais"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.garysieling.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","position":2,"name":"Code Examples","item":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/#listItem","name":"Access OpenCalais from Node.js"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/#listItem","position":3,"name":"Access OpenCalais from Node.js","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}}]},{"@type":"Organization","@id":"https:\/\/www.garysieling.com\/blog\/#organization","name":"Gary Sieling","description":"Software Engineer","url":"https:\/\/www.garysieling.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author","url":"https:\/\/www.garysieling.com\/blog\/author\/gary\/","name":"gary","image":{"@type":"ImageObject","@id":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g","width":96,"height":96,"caption":"gary"}},{"@type":"WebPage","@id":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/","name":"Access OpenCalais from Node.js - Gary Sieling","description":"Accessing OpenCalais from Node.js","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2016-07-28T03:29:19+00:00","dateModified":"2016-07-28T03:29:19+00:00"},{"@type":"WebSite","@id":"https:\/\/www.garysieling.com\/blog\/#website","url":"https:\/\/www.garysieling.com\/blog\/","name":"Gary Sieling","description":"Software Engineer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Gary Sieling - Software Engineer","og:type":"article","og:title":"Access OpenCalais from Node.js - Gary Sieling","og:description":"Accessing OpenCalais from Node.js","og:url":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/","article:published_time":"2016-07-28T03:29:19+00:00","article:modified_time":"2016-07-28T03:29:19+00:00","twitter:card":"summary_large_image","twitter:title":"Access OpenCalais from Node.js - Gary Sieling","twitter:description":"Accessing OpenCalais from Node.js"},"aioseo_meta_data":{"post_id":"4812","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-02-04 17:02:39","updated":"2026-07-06 02:09:48","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/\" title=\"Code Examples\">Code Examples<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tAccess OpenCalais from Node.js\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"Code Examples","link":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/"},{"label":"Access OpenCalais from Node.js","link":"https:\/\/www.garysieling.com\/blog\/access-opencalais-node-js\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/4812"}],"collection":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/comments?post=4812"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/4812\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=4812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=4812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=4812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}