{"id":969,"date":"2017-06-19T07:00:32","date_gmt":"2017-06-19T06:00:32","guid":{"rendered":"http:\/\/exponentialdecay.co.uk\/blog\/?p=969"},"modified":"2025-11-30T17:03:25","modified_gmt":"2025-11-30T17:03:25","slug":"the-painter-goblin-part-3-data-sources","status":"publish","type":"post","link":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/","title":{"rendered":"The Painter Goblin: Part 3, Data Sources"},"content":{"rendered":"<p>One thing that held the Painter Goblin project back was finding a data source to get images from.<\/p>\n<p>There are potentially hundreds of sources out there, but! The path of least resistance means that:<\/p>\n<ul>\n<li>Any source needs either hackable URIs** (uniform resource identifier) or a randomizing function.<\/li>\n<li>Ideally, a data source doesn\u2019t link to yet-another-page, e.g. portal like websites to other\u2019s collections.<\/li>\n<li>Ideally the data source links directly to an image to download.<\/li>\n<li>Data can be easily selected by category, e.g. just paintings, or posters, not just \u2018art\u2019.<\/li>\n<\/ul>\n<p><em>** A hackable URI is a URI pattern that can be cycled through using computational techniques, even if the underlying data isn\u2019t entirely well-known. E,g, http:\/\/example.com\/image\/0001, http:\/\/example.com\/image\/0002, for subsequent pages, for lack of a more concrete example.<\/em><\/p>\n<p>I wanted to explore heritage sources such as Europeana, TROVE, DPLA. I struggled to search these effectively though, and struggled to see how I might automate using them. I recognise they have APIs. I\u2019ll revisit them in the future as I look to expand the Painter Goblin\u2019s corpus.<\/p>\n<p>Enter Wikidata.<\/p>\n<p><!--more--><\/p>\n<h2>Enter Wikidata<\/h2>\n<p>I started looking at Wikipedia knowing that it was categorized well and could also return random pages. I didn\u2019t know how to create a random search per category though.<\/p>\n<p>I then started thinking about <a href=\"https:\/\/www.wikidata.org\/wiki\/Wikidata:Main_Page\" target=\"_blank\" rel=\"noopener\">Wikidata<\/a>\u00a0(an open data project that is part of the other wiki projects). Already aware that it had a SPARQL endpoint a technology I was familiar with, I just had to figure out if I could split searches by category, randomly, and via URI, e.g. via CURL or some such.<\/p>\n<p>This is where I got lucky as my search started by looking at the <a href=\"https:\/\/www.wikidata.org\/wiki\/Wikidata:SPARQL_query_service\/queries\/examples\" target=\"_blank\" rel=\"noopener\">Wikidata examples<\/a> page.<\/p>\n<p>But even better than that \u2013 one of the examples was about <a href=\"https:\/\/www.wikidata.org\/wiki\/Wikidata:SPARQL_query_service\/queries\/examples#Ten_random_painting_images\" target=\"_blank\" rel=\"noopener\">finding random paintings<\/a>.<\/p>\n<p>This was everything I needed.<\/p>\n<h2>Although it&#8217;s not all solved&#8230;<\/h2>\n<p>If Wikidata hadn\u2019t provided this example then the learning curve would have been much steeper. Specifically, one of the hardest things to get used to is the naming conventions for URIs, e.g. subjects, and predicates.<\/p>\n<ul>\n<li>Van Gogh, for example, is: Q5582, e.g.\u00a0<a href=\"https:\/\/www.wikidata.org\/wiki\/Q5582\" target=\"_blank\" rel=\"noopener\">https:\/\/www.wikidata.org\/wiki\/Q5582<\/a><\/li>\n<li>His Starry Night painting is: Q45585, e.g.\u00a0<a href=\"https:\/\/www.wikidata.org\/wiki\/Q45585\" target=\"_blank\" rel=\"noopener\">https:\/\/www.wikidata.org\/wiki\/Q45585<\/a><\/li>\n<\/ul>\n<p>And a location predicate looks like:<\/p>\n<ul>\n<li>Location, P276, e.g.\u00a0<a href=\"https:\/\/www.wikidata.org\/wiki\/Property:P276\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.wikidata.org\/wiki\/Property:P276<\/a><\/li>\n<\/ul>\n<p>So they\u2019re not user-friendly &#8211; they need to be known via other mechanism (I used search engine) and then input that information into queries.<\/p>\n<p>But\u2014like I said\u2014I had a head start, and with the data I could already retrieve, I only had to figure out a few more pieces to be able to start the bot.<\/p>\n<h2>What to tweet?<\/h2>\n<p>What do you want to know when you look at a piece of art? &#8211; Who made it, the title, and perhaps its location, or collection, are important. With the information coming from Wikidata we can also return the URI.<\/p>\n<p>Providing we can return an image from Wikidata \u2013 key to this project, we need to download this to a temporary location and give the Painter Goblin what it needs to remix the content.<\/p>\n<p>An example tweet may then be<\/p>\n<pre>{item name or number} {artist} {location} {Wikidata URI}<\/pre>\n<p>e.g. <em><strong>Q27513169,<\/strong> Eug\u00e8ne Grasset, Museu Nacional d&#8217;Art de Catalunya <a href=\"https:\/\/www.wikidata.org\/entity\/Q27513169\" target=\"_blank\" rel=\"noopener\">https:\/\/www.wikidata.org\/entity\/Q27513169\u00a0<\/a><\/em><\/p>\n<p><span style=\"font-family: Arial, sans-serif;\"><span style=\"font-size: small;\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/eugene-samuel\/\" rel=\"attachment wp-att-970\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-970\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/Eugene-Samuel.png\" alt=\"Exposition de Internationale, Madrid\" width=\"1484\" height=\"1024\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/Eugene-Samuel.png 1484w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/Eugene-Samuel-300x207.png 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/Eugene-Samuel-768x530.png 768w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/Eugene-Samuel-1024x707.png 1024w\" sizes=\"auto, (max-width: 1484px) 100vw, 1484px\" \/><\/a><\/span><\/span><\/p>\n<p><em><strong>N.B.\u00a0<\/strong>Images aren&#8217;t compared to each other in the real life Tweet. This is just for the blog. The design decision was not to do this so as not to take away from the remixed piece produced by The Goblin.<\/em><\/p>\n<p>The SPARQL used in-code to generate a random tweet looks like:<\/p>\n<pre>SELECT ?item ?itemLabel ?image ?loc ?locLabel ?coll ?collLabel ?artist ?artistLabel (MD5(CONCAT(str(?item),str(RAND()))) as ?random) WHERE {\r\n ?item wdt:P31 wd:Q429785.\r\n ?item wdt:P18 ?image.\r\n OPTIONAL { ?item wdt:P276 ?loc . }\r\n ?item wdt:P195 ?coll .\r\n ?item wdt:P170 ?artist .\r\n SERVICE wikibase:label { bd:serviceParam wikibase:language \"en,fr,de,it\"}\r\n} ORDER BY ?random\r\nLIMIT 10<\/pre>\n<p>In the <a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-2-twitter-pieces\/\" target=\"_blank\" rel=\"noopener\">second part<\/a> to this series I mentioned being able to manually tweet. One mechanism we might use to do this is by knowing the link first, so a randomly found image isn\u2019t needed. To do that we can use the following SPARQL;<\/p>\n<pre>SELECT ?itemLabel ?image ?loc ?locLabel ?coll ?collLabel ?artist ?artistLabel WHERE { \r\n OPTIONAL { &lt;http:\/\/www.wikidata.org\/entity\/Q27513169&gt; rdfs:label ?itemLabel . \r\n FILTER (LANG(?itemLabel) = \"en\") } \r\n &lt;http:\/\/www.wikidata.org\/entity\/Q27513169&gt; wdt:P18 ?image . \r\n OPTIONAL { &lt;http:\/\/www.wikidata.org\/entity\/Q27513169&gt; wdt:P276 ?loc . } \r\n &lt;http:\/\/www.wikidata.org\/entity\/Q27513169&gt; wdt:P195 ?coll . \r\n &lt;http:\/\/www.wikidata.org\/entity\/Q27513169&gt; wdt:P170 ?artist . \r\n SERVICE wikibase:label { bd:serviceParam wikibase:language \"en,fr,de,it\"} \r\n} LIMIT 1<\/pre>\n<p>All that is left is for the Painter Goblin to be <a href=\"https:\/\/x.com\/paintergoblin\/status\/870434897986453504\" target=\"_blank\" rel=\"noopener\">start painting<\/a>!<\/p>\n<h3>Wikidata query service (WDQS)<\/h3>\n<p>You can try the SPARQL queries on the <a href=\"https:\/\/query.wikidata.org\/#%23%20This%20returns%2020%20random%20painting%20images%0A%23%20RAND%28%29%20returns%20one%20random%20number%20%28cached%20like%20every%20query%29.%20%0A%23%20The%20string%20representation%20of%20the%20item%20and%20the%20random%20number%20are%20hashed.%0A%23%20This%20will%20give%20a%20complete%20different%20ordering%20every%20time%20you%20have%20a%20different%20random%20number.%0A%23%20You%20can%20change%20the%20LIMIT%20if%20you%20want%20to%20trigger%20a%20new%20random%20number%0A%23defaultView%3AImageGrid%0ASELECT%20%3Fitem%20%3FitemLabel%20%3Fimage%20%3Floc%20%3FlocLabel%20%3Fcoll%20%3FcollLabel%20%3Fartist%20%3FartistLabel%20%28MD5%28CONCAT%28str%28%3Fitem%29%2Cstr%28RAND%28%29%29%29%29%20as%20%3Frandom%29%20WHERE%20%7B%0A%20%3Fitem%20wdt%3AP31%20wd%3AQ429785.%0A%20%3Fitem%20wdt%3AP18%20%3Fimage.%0A%20OPTIONAL%20%7B%20%3Fitem%20wdt%3AP276%20%3Floc%20.%20%7D%0A%20%3Fitem%20wdt%3AP195%20%3Fcoll%20.%0A%20%3Fitem%20wdt%3AP170%20%3Fartist%20.%0A%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%2Cfr%2Cde%2Cit%22%7D%0A%7D%20ORDER%20BY%20%3Frandom%0ALIMIT%2020\" target=\"_blank\" rel=\"noopener noreferrer\">Wikidata Query Service<\/a>. It&#8217;s pretty cool that there&#8217;s a tag that informs Wikidata to preview the results for us,<\/p>\n<pre>#defaultView:ImageGrid<\/pre>\n<p>Give it a whirl!<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_969\" class=\"pvc_stats total_only  \" data-element-id=\"969\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>One thing that held the Painter Goblin project back was finding a data source to get images from.<\/p>\n<p>There are potentially hundreds of sources out there, but! The path of least resistance means that:<\/p>\n<ul>\n<li>Any source needs either hackable URIs** (uniform resource identifier) or a randomizing function.<\/li>\n<li>Ideally, a data source doesn\u2019t link to yet-another-page, e.g. portal like websites to other\u2019s collections.<\/li>\n<li>Ideally the data source links directly to an image to download.<\/li>\n<li>Data can be easily selected by category, e.g. just paintings, or posters, not just \u2018art\u2019.<\/li>\n<\/ul>\n<p><em>** A hackable URI is a URI pattern that can be cycled through using computational techniques, even if the underlying data isn\u2019t entirely well-known. E,g, http:\/\/example.com\/image\/0001, http:\/\/example.com\/image\/0002, for subsequent pages, for lack of a more concrete example.<\/em><\/p>\n<p>I wanted to explore heritage sources such as Europeana, TROVE, DPLA. I struggled to search these effectively though, and struggled to see how I might automate using them. I recognise they have APIs. I\u2019ll revisit them in the future as I look to expand the Painter Goblin\u2019s corpus.<\/p>\n<p>Enter Wikidata.<\/p>\n<div class=\"link-more\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &ldquo;The Painter Goblin: Part 3, Data Sources&rdquo;<\/span>&hellip;<\/a><\/div>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_969\" class=\"pvc_stats total_only  \" data-element-id=\"969\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":971,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"quiet_public","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":""},"categories":[20,54,135,19],"tags":[24,61,96,124,21,419,115,68,121,132,131,64,122,119],"class_list":["post-969","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-just-code","category-linked-open-data","category-painter-goblin","category-python","tag-art","tag-code","tag-coding","tag-creative-commons","tag-data","tag-defaultview","tag-digital-literacy","tag-generative-art","tag-open-data","tag-painter-goblin","tag-paintergoblin","tag-twitter","tag-twitter-bot","tag-wikidata","entry"],"a3_pvc":{"activated":true,"total_views":1981,"today_views":0},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>The Painter Goblin: Part 3, Data Sources<\/title>\n<meta name=\"description\" content=\"A look at how Wikidata is used as a source of data for The Painter Goblin project and some of the decision making involved.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Painter Goblin: Part 3, Data Sources\" \/>\n<meta property=\"og:description\" content=\"A look at how Wikidata is used as a source of data for The Painter Goblin project and some of the decision making involved.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/\" \/>\n<meta property=\"og:site_name\" content=\"ross spencer :: exponentialdecay.digipres :: blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-19T06:00:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-30T17:03:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/DBRn7KpW0AEjQ0p-e1496644047425.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"735\" \/>\n\t<meta property=\"og:image:height\" content=\"450\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ross Spencer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@beet_keeper\" \/>\n<meta name=\"twitter:site\" content=\"@beet_keeper\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ross Spencer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/\"},\"author\":{\"name\":\"Ross Spencer\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"headline\":\"The Painter Goblin: Part 3, Data Sources\",\"datePublished\":\"2017-06-19T06:00:32+00:00\",\"dateModified\":\"2025-11-30T17:03:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/\"},\"wordCount\":713,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"image\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/06\\\/DBRn7KpW0AEjQ0p-e1496644047425.jpg\",\"keywords\":[\"Art\",\"Code\",\"Coding\",\"Creative Commons\",\"Data\",\"defaultView\",\"digital literacy\",\"Generative Art\",\"Open Data\",\"painter goblin\",\"paintergoblin\",\"Twitter\",\"Twitter Bot\",\"wikidata\"],\"articleSection\":[\"Just Code\",\"Linked Open Data\",\"Painter Goblin\",\"Python\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/\",\"name\":\"The Painter Goblin: Part 3, Data Sources\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/06\\\/DBRn7KpW0AEjQ0p-e1496644047425.jpg\",\"datePublished\":\"2017-06-19T06:00:32+00:00\",\"dateModified\":\"2025-11-30T17:03:25+00:00\",\"description\":\"A look at how Wikidata is used as a source of data for The Painter Goblin project and some of the decision making involved.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/#primaryimage\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/06\\\/DBRn7KpW0AEjQ0p-e1496644047425.jpg\",\"contentUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/06\\\/DBRn7KpW0AEjQ0p-e1496644047425.jpg\",\"width\":735,\"height\":450},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-3-data-sources\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Painter Goblin: Part 3, Data Sources\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/\",\"name\":\"ross spencer :: exponentialdecay.digipres :: blog\",\"description\":\"Digital preservation analyst, researcher, and software developer\",\"publisher\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\",\"name\":\"Ross Spencer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"contentUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"width\":2560,\"height\":2560,\"caption\":\"Ross Spencer\"},\"logo\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\"},\"description\":\"Digital preservation domain expert and full-stack software developer.\",\"sameAs\":[\"http:\\\/\\\/www.exponentialdecay.co.uk\\\/blog\",\"https:\\\/\\\/www.instagram.com\\\/b33tk33p3r\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ross-spencer-b6b9b758\\\/\",\"https:\\\/\\\/x.com\\\/beet_keeper\"],\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/author\\\/exponentialdecay\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Painter Goblin: Part 3, Data Sources","description":"A look at how Wikidata is used as a source of data for The Painter Goblin project and some of the decision making involved.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/","og_locale":"en_US","og_type":"article","og_title":"The Painter Goblin: Part 3, Data Sources","og_description":"A look at how Wikidata is used as a source of data for The Painter Goblin project and some of the decision making involved.","og_url":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/","og_site_name":"ross spencer :: exponentialdecay.digipres :: blog","article_published_time":"2017-06-19T06:00:32+00:00","article_modified_time":"2025-11-30T17:03:25+00:00","og_image":[{"width":735,"height":450,"url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/DBRn7KpW0AEjQ0p-e1496644047425.jpg","type":"image\/jpeg"}],"author":"Ross Spencer","twitter_card":"summary_large_image","twitter_creator":"@beet_keeper","twitter_site":"@beet_keeper","twitter_misc":{"Written by":"Ross Spencer","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/#article","isPartOf":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/"},"author":{"name":"Ross Spencer","@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"headline":"The Painter Goblin: Part 3, Data Sources","datePublished":"2017-06-19T06:00:32+00:00","dateModified":"2025-11-30T17:03:25+00:00","mainEntityOfPage":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/"},"wordCount":713,"commentCount":1,"publisher":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"image":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/#primaryimage"},"thumbnailUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/DBRn7KpW0AEjQ0p-e1496644047425.jpg","keywords":["Art","Code","Coding","Creative Commons","Data","defaultView","digital literacy","Generative Art","Open Data","painter goblin","paintergoblin","Twitter","Twitter Bot","wikidata"],"articleSection":["Just Code","Linked Open Data","Painter Goblin","Python"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/","url":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/","name":"The Painter Goblin: Part 3, Data Sources","isPartOf":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/#primaryimage"},"image":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/#primaryimage"},"thumbnailUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/DBRn7KpW0AEjQ0p-e1496644047425.jpg","datePublished":"2017-06-19T06:00:32+00:00","dateModified":"2025-11-30T17:03:25+00:00","description":"A look at how Wikidata is used as a source of data for The Painter Goblin project and some of the decision making involved.","breadcrumb":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/#primaryimage","url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/DBRn7KpW0AEjQ0p-e1496644047425.jpg","contentUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/DBRn7KpW0AEjQ0p-e1496644047425.jpg","width":735,"height":450},{"@type":"BreadcrumbList","@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-3-data-sources\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/exponentialdecay.co.uk\/blog\/"},{"@type":"ListItem","position":2,"name":"The Painter Goblin: Part 3, Data Sources"}]},{"@type":"WebSite","@id":"https:\/\/exponentialdecay.co.uk\/blog\/#website","url":"https:\/\/exponentialdecay.co.uk\/blog\/","name":"ross spencer :: exponentialdecay.digipres :: blog","description":"Digital preservation analyst, researcher, and software developer","publisher":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/exponentialdecay.co.uk\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716","name":"Ross Spencer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","contentUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","width":2560,"height":2560,"caption":"Ross Spencer"},"logo":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png"},"description":"Digital preservation domain expert and full-stack software developer.","sameAs":["http:\/\/www.exponentialdecay.co.uk\/blog","https:\/\/www.instagram.com\/b33tk33p3r\/","https:\/\/www.linkedin.com\/in\/ross-spencer-b6b9b758\/","https:\/\/x.com\/beet_keeper"],"url":"https:\/\/exponentialdecay.co.uk\/blog\/author\/exponentialdecay\/"}]}},"views":2957,"_links":{"self":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/969","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=969"}],"version-history":[{"count":10,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/969\/revisions"}],"predecessor-version":[{"id":2813,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/969\/revisions\/2813"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/media\/971"}],"wp:attachment":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=969"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=969"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=969"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}