{"id":4572,"date":"2019-12-30T09:56:51","date_gmt":"2019-12-30T08:56:51","guid":{"rendered":"https:\/\/pythonprogramming.altervista.org\/?p=4572"},"modified":"2020-09-14T05:05:49","modified_gmt":"2020-09-14T03:05:49","slug":"mind-map-with-python","status":"publish","type":"post","link":"https:\/\/pythonprogramming.altervista.org\/mind-map-with-python\/","title":{"rendered":"Mind Map with Python"},"content":{"rendered":"<p>I always wanted a program to generate mind maps. This is the first attempt to do it with Python.<\/p>\n<p>This is an example of the output we will get.<\/p>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/12\/g.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4574\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/12\/g.png\" alt=\"\" width=\"1007\" height=\"251\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/12\/g.png 1007w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/12\/g-320x80.png 320w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/12\/g-960x239.png 960w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/12\/g-768x191.png 768w\" sizes=\"auto, (max-width: 1007px) 100vw, 1007px\" \/><\/a><\/p>\n<h2>Install Graphviz (eventually with chocolatey)<\/h2>\n<p>To make a mind map with <strong>Python<\/strong> you need to install <strong>Graphviz<\/strong> at <a href=\"https:\/\/graphviz.gitlab.io\/_pages\/Download\/Download_windows.html\">this web page<\/a>.<\/p>\n<p>You could use also <strong>chocolatey<\/strong> to install <strong>Graphviz<\/strong>.<\/p>\n<p>Chocoloatey installs <strong>Graphviz<\/strong>. <a href=\"https:\/\/chocolatey.org\/install\">Go to chocolatey<\/a> and install it.<\/p>\n<p>Watch the <strong>video<\/strong> to see how I did it.<\/p>\n<h2>Install pydot<\/h2>\n<p>Now we&#8217;re ready to install <strong>pydot<\/strong> in the <strong>cmd<\/strong> (command line) or <strong>powershell<\/strong>:<\/p>\n<p><strong>pip install pydot<\/strong><\/p>\n<h2>Ready for the code<\/h2>\n<p>You should also go in the <strong>environmental<\/strong> variable settings (watch the video) and insert the path to <strong>Graphviz<\/strong> in it.<\/p>\n<p>The path is also to paste into the code. In fact after you imported pydot (and os), you need to add this line of code:<\/p>\n<pre class=\"lang:default decode:true \">import pydot\r\nimport os\r\nos.environ[\"PATH\"] += os.pathsep + 'C:\\\\Program Files (x86)\\\\Graphviz2.38\\\\bin'<\/pre>\n<p>Rememeber that the <strong>environ<\/strong> path is the one on my computer. You gotta put the one on your that could be the same of mine, but it is not sure, you could have installed somewhere else.<\/p>\n<p>Now we are ready.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media3.giphy.com\/media\/l0MYzAwMPl8s0jtSg\/giphy.gif\" alt=\"Risultati immagini per gif ready\" \/><\/p>\n<h2>Create a Dot istance (let&#8217;s call it graph)<\/h2>\n<pre class=\"lang:default decode:true \">graph = pydot.Dot(graph_type=\"digraph\", rankdir=\"UD\")<\/pre>\n<p>The graph type could have been also <strong>graph<\/strong>. The <strong>UD<\/strong> means <strong>Up down<\/strong>, for the vertical oriented maps. If you want a <strong>left to right<\/strong> map, use <strong>LR<\/strong> instead.<\/p>\n<p>Now we create the <strong>root<\/strong> node, the master, the topic of whatever you want to call the keyword that is the start of the map. Let&#8217;s say the topic is <strong>Pydot<\/strong>!<\/p>\n<pre class=\"lang:default decode:true \">root = \"Pydot\"<\/pre>\n<p>Now let&#8217;s create adn <strong>Edge<\/strong> object with the name of the <strong>root<\/strong> and his <strong>child<\/strong> as <strong>arguments<\/strong>. We will add the edge to graph with the <strong>add_edge<\/strong> method. Then we save the image of the map and show it.<\/p>\n<pre class=\"lang:default decode:true\">import pydot\r\nimport os\r\nos.environ[\"PATH\"] += os.pathsep + 'C:\\\\Program Files (x86)\\\\Graphviz2.38\\\\bin'\r\n\r\ngraph = pydot.Dot(graph_type=\"graph\", rankdir=\"UD\")\r\n\r\nroot = \"Pydot\"\r\nedge = pydot.Edge(root, \"How to install it\")\r\ngraph.add_edge(edge)\r\n\r\ngraph.write_png(\"Hello.png\")\r\nos.startfile(\"Hello.png\")<\/pre>\n<p>We could stop here and save an image of the map:<\/p>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/12\/Hello.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4580\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/12\/Hello.png\" alt=\"\" width=\"191\" height=\"155\" \/><\/a><\/p>\n<h2>Create 2 children of a child<\/h2>\n<p>Now, to add two <strong>children<\/strong> to <strong>How to install<\/strong> it you can add<\/p>\n<pre class=\"lang:default decode:true\">edge = pydot.Edge(\"How to install it\", \"Way 1\")\r\ngraph.add_edge(edge)\r\n\r\nedge = pydot.Edge(\"How to install it\", \"Way 2\")\r\ngraph.add_edge(edge)<\/pre>\n<p>The whole code being:<\/p>\n<pre class=\"lang:default decode:true\">import pydot\r\nimport os\r\nos.environ[\"PATH\"] += os.pathsep + 'C:\\\\Program Files (x86)\\\\Graphviz2.38\\\\bin'\r\n\r\ngraph = pydot.Dot(graph_type=\"graph\", rankdir=\"UD\")\r\n\r\nroot = \"Pydot\"\r\nedge = pydot.Edge(root, \"How to install it\")\r\ngraph.add_edge(edge)\r\n\r\nedge = pydot.Edge(\"How to install it\", \"Way 1\")\r\ngraph.add_edge(edge)\r\n\r\nedge = pydot.Edge(\"How to install it\", \"Way 2\")\r\ngraph.add_edge(edge)\r\n\r\ngraph.write_png(\"Hello.png\")\r\nos.startfile(\"Hello.png\")<\/pre>\n<p>The <strong>output<\/strong> would be:<\/p>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/12\/Hello-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4590\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/12\/Hello-1.png\" alt=\"\" width=\"219\" height=\"251\" \/><\/a><\/p>\n<p>As you can see, it is <strong>easy<\/strong>, <strong>but<\/strong> a bit <strong>tedious<\/strong>. If you watch the video you will see me trying to <strong>abstract<\/strong> a little bit the code, so that it is less annoying to add the childrens&#8230; there will be for sure <strong>better<\/strong> <strong>ways<\/strong>, but I leave them to your imagination or to <strong>future<\/strong> articles&#8230;<\/p>\n<h2>A nice example (the one you see in the video)<\/h2>\n<pre class=\"lang:default decode:true \">import pydot\r\nimport os\r\n\r\nos.environ[\"PATH\"] += os.pathsep + \"C:\\\\Program Files (x86)\\\\Graphviz2.38\\\\bin\\\\\"\r\n\r\ngraph = pydot.Dot(graph_type=\"graph\", rankdir=\"UD\")\r\n\r\ndef add_edge(root, child):\r\n    edge = pydot.Edge(root, child)\r\n    graph.add_edge(edge)\r\n\r\ndef add(root, children):\r\n    if children.splitlines()[0] == \"\":\r\n        children = children.splitlines()[1:]\r\n    else:\r\n        children = children.splitlines()\r\n    for child in children:\r\n        add_edge(root, child)\r\n\r\n# ======================= 1 Python\\Children\r\nadd(\"Pydot\",\r\n\"\"\"Install\r\nExamples\r\nInfo\r\n\"\"\")\r\n# ===================== 2 Pydot\\Examples\\Children\r\nadd(\"Examples\", \"\"\"\r\nExample 1\r\nExample 2\r\n\"\"\")\r\n# ======================= level 2: Pydot\\Info\\Children\r\nadd(\"Info\", \"\"\"\r\nAuthor\r\n\"\"\")\r\n# ====================== Lev. 3 Pydot\\Info\\author\\hello\r\n\r\nadd(\"Author\", \"Hello\")\r\n\r\ngraph.write_png(\"map.png\")\r\nos.startfile(\"map.png\")<\/pre>\n<p>And now&#8230;<\/p>\n<h2>The live coding video of Pydot to make Mind Maps and Concepts Maps with Python<\/h2>\n<p><iframe loading=\"lazy\" title=\"Python Mind Maps with Pydot\" width=\"747\" height=\"420\" src=\"https:\/\/www.youtube.com\/embed\/qkJt70NH1VA?feature=oembed&amp;enablejsapi=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<!-- se vuoi mettere un testo scorrevole\r\n[hoops name=\"typeWriterGen\"]\r\n\r\npoi metti un id diverso per ogni testo nella stessa pagina\r\n\r\n<div id=\"div01\">\r\n<script>\r\n\r\ntypeWriterGen(\"div01\",\"Esempio di testo scorrevole\");\r\n<\/script>\r\n\r\n-->\r\n<style>\r\n.avatar {\r\n  vertical-align: middle;\r\n  width: 100px;\r\n  height: 100px;\r\n  border-radius: 50%;\r\n}\r\n<\/style>\r\n\r\n<hr>\r\n\r\n<!-- NEWSLETTER LINK -->\r\n<a href=\"https:\/\/docs.google.com\/forms\/d\/e\/1FAIpQLSf7TniIPCWHDzCSGh2dYZaCwDvi9yLKS5ovFdKuK1sdfOvwEg\/viewform\">\r\n<img decoding=\"async\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/08\/image-13.png\" class=\"avatar\">\r\nSubscribe to the <b>newsletter<\/b> for updates<\/a><br>\r\n\r\n<!-- TKINTER TEMPLATE LINK -->\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/tkinter-templates\/\">\r\n<img decoding=\"async\" src=\"https:\/\/i0.wp.com\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-26.png\" class=\"avatar\">\r\nTkinter templates<\/a><br>\r\n\r\n<!-- MY AVATAR PUT A LINK TO YOUTUBE CHANNEL-->\r\n<iframe loading=\"lazy\" frameborder=\"0\" src=\"https:\/\/itch.io\/embed\/711828\" width=\"552\" height=\"167\"><a href=\"https:\/\/pythonprogrammi.itch.io\/pysnake\">PySnake by PythonProgrammi<\/a><\/iframe>\r\n<br>\r\n<style>\r\n.avatar {\r\n  vertical-align: middle;\r\n  width: 100px;\r\n  height: 100px;\r\n  border-radius: 50%;\r\n}\r\n<\/style>\r\n\r\n\r\n<a href=\"https:\/\/www.youtube.com\/channel\/UCzbxq5e9gLiY-je2-br1rvg\">\r\n\t<img decoding=\"async\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/10\/avatar64x64.png\" alt=\"Avatar\" class=\"avatar\">\r\n\t My youtube channel<\/a><br>\r\n\r\n<br>\r\n\r\nTwitter: <a href=\"https:\/\/twitter.com\/pythonprogrammi\">@pythonprogrammi - python_pygame<\/a>\r\n<h3>Claude's Games<\/h3>\r\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/random-daily-game-1-arkanoid\/\">Arkanoid<\/a><br>\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/platform-2d-with-pygame-made-with-claude\/\">Platform 2d<\/a><\/p> <!-- videogames made with claude -->\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/artifacts-games-day-1-memory-game\/\">1. Memory game<\/a>\r\n<h4>Videos<\/h4>\r\n<a href=\"https:\/\/youtu.be\/ciLjWWw5pLY\">Speech recognition game<\/a>\r\n<h3>Pygame's Platform Game<\/h3>\r\n\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-5-sounds-and-mixer\/\"><img decoding=\"async\" src=\"https:\/\/i1.wp.com\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/01\/climbercover.png?w=557&ssl=1\"\/ width=\"50%\"><\/a>\r\n<script>\r\nvar title = \"Platform Pygame\";\r\n\t\tvar links = [\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-animation-of-a-sprite-v-1-3\/\",\"Animation 1.3\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-sprite-animation-v-2-better-coding-test-it-checking-fps-on-the-screen\/\",\"Animation 1.2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-how-to-display-the-frame-rate-fps-on-the-screen\/\",\"Display Frame rate\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-sprite-animation-update\/\",\"Animation 1.1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platformer-1\/\",\"Pygame Platform Game 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/python-platform-game-2\/\",\"Pygame Platform 2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-3-recap-cheatsheet\/\",\"Pygame PLatform 3 - recap and some Cheat Sheet\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-4-background-and-stuffs\/\",\"Pygame Platform 4 - Background & organizing code\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-5-sounds-and-mixer\/\",\"Pygame Platform 5 - Sounds\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/platform-game-in-detail-part-1\/\",\"Game in detail part 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/map-maker-1-2\/\", \"Map maker 1.2\"]\r\n\t\t];\r\n\t\t<\/script>\r\n<script>\r\n\t\r\nif (typeof next2 != \"undefined\"){let next2 = 0;}\r\n\t\r\nnext2 = 0;\r\n\thtml = \"\";\/\/<b style='color:coral;font-size:1.2em'>Other posts about \" + title + \"<\/b><br>\";\r\nfor (address of links) \r\n{\r\n\r\n\tif (next2 == 1){\r\n\t\thtml += \"<div style='background:coral'>\";\r\n\t\thtml += \"Next link => <a href='\" + address[0] + \"'>\" + address[1] + \"<\/a>\";\r\n\t\thtml += \"<\/div><br>\";\r\n\t\tnext2 = 0;\r\n\t}\r\n\tif (address[0] == document.URL) {\r\n\t\tnext2 = 1;\r\n\t}\r\n}\r\n\r\nif (typeof next != \"undefined\") {let next = 0;}\r\nif (typeof addressStart != \"undefined\") {let addressStart = \"\";}\r\nnext = 0;\r\naddressStart = \"<a href='\";\r\nfor (address of links) {\r\n\tif (next == 1){\r\n\t\thtml += \">>>\" + addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t\tnext = 0;\r\n\t}\r\n\telse if (addressStart + address[0] != document.URL)\r\n\t{\r\n\t\thtml += addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t}\r\n\telse\r\n\t{\r\n\t\tnext = 1;\r\n\t\tnext_address = address[0]\r\n\t\tnext_title = address[1]\r\n\t\thtml += \"<span style='color:gray'>\" + address[1] + \"<\/span><br>\";\r\n\t}\r\n\r\n}\r\n\r\n\thtml += `<span style=\"font-size:8px\">Powered by <a href=\"https:\/\/pythonprogramming.altervista.org\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2673\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png\" alt=\"\" width=\"70\" height=\"25\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png 156w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2-150x56.png 150w\" sizes=\"auto, (max-width: 70px) 100vw, 70px\" \/>pythonprogramming.altervista.org<\/a><\/span>`\r\n\thtml = \"<div style='background:yellow'>\" + html + \"<\/div>\";\r\n\tdocument.write(html)\r\n<\/script>\r\n\r\n<h3>Other Pygame's posts<\/h3>\r\n\r\n<script>\r\nvar title = \"Pygame's Posts\"\r\nvar links = [\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platformer-1\/\",\"Platform game 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/make-a-platform-game-with-pygame-dafluffypotato\/\",\"DaFluffyPotato Platform Tutorials\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/python-and-classic-arcade-games-pong\/\",\"Pong Game Full\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/python-draws-in-colors-app-to-draw-with-pygame\/\",\"PyGameGIF 2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-draw-app-with-animation\/\",\"PyGameGIF 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pydraw-2-0-app-to-draw-gif\/\",\"PyDraw 2.0\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-drawing-2\/\",\"Draw with Pygame\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/animation-with-pygame\",\"Sprite animation 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/animation-on-pygame-2-free-characters-and-more-actions\/\",\"Sprite animation 2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/starting-with-pygame\/\",\"Starting movements with Pygame\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-3-move-sprite\/\", \"Move a Sprite\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-4-fonts\/\",\"Text and Fonts\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-animate-a-sprite\/\", \"Animate a sprite\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-and-mouse-events\/\",\"Mouse events\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pgp-aka-pygamepresentation-project\/\",\"Pygame presentation\"],\r\n\t[\"https:\/\/pythonprogramming.altervista.org\/moving-the-player-in-pygame-with-key-get_pressed\/\",\"How to use key.get_pressed()\"]\r\n]\r\n<\/script>\r\n\r\n\r\n<script>\r\n\t\r\nif (typeof next2 != \"undefined\"){let next2 = 0;}\r\n\t\r\nnext2 = 0;\r\n\thtml = \"\";\/\/<b style='color:coral;font-size:1.2em'>Other posts about \" + title + \"<\/b><br>\";\r\nfor (address of links) \r\n{\r\n\r\n\tif (next2 == 1){\r\n\t\thtml += \"<div style='background:coral'>\";\r\n\t\thtml += \"Next link => <a href='\" + address[0] + \"'>\" + address[1] + \"<\/a>\";\r\n\t\thtml += \"<\/div><br>\";\r\n\t\tnext2 = 0;\r\n\t}\r\n\tif (address[0] == document.URL) {\r\n\t\tnext2 = 1;\r\n\t}\r\n}\r\n\r\nif (typeof next != \"undefined\") {let next = 0;}\r\nif (typeof addressStart != \"undefined\") {let addressStart = \"\";}\r\nnext = 0;\r\naddressStart = \"<a href='\";\r\nfor (address of links) {\r\n\tif (next == 1){\r\n\t\thtml += \">>>\" + addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t\tnext = 0;\r\n\t}\r\n\telse if (addressStart + address[0] != document.URL)\r\n\t{\r\n\t\thtml += addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t}\r\n\telse\r\n\t{\r\n\t\tnext = 1;\r\n\t\tnext_address = address[0]\r\n\t\tnext_title = address[1]\r\n\t\thtml += \"<span style='color:gray'>\" + address[1] + \"<\/span><br>\";\r\n\t}\r\n\r\n}\r\n\r\n\thtml += `<span style=\"font-size:8px\">Powered by <a href=\"https:\/\/pythonprogramming.altervista.org\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2673\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png\" alt=\"\" width=\"70\" height=\"25\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png 156w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2-150x56.png 150w\" sizes=\"auto, (max-width: 70px) 100vw, 70px\" \/>pythonprogramming.altervista.org<\/a><\/span>`\r\n\thtml = \"<div style='background:yellow'>\" + html + \"<\/div>\";\r\n\tdocument.write(html)\r\n<\/script>\n","protected":false},"excerpt":{"rendered":"Create a mind map with Python and pydot through some easy steps following a step by step video with an example of actual code\n<a class=\"moretag\" href=\"https:\/\/pythonprogramming.altervista.org\/mind-map-with-python\/\"> [...]<\/a>","protected":false},"author":1,"featured_media":4575,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[666,1,907],"tags":[665,662,664,661,663,4],"class_list":["post-4572","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-education","category-examples","category-mind-map","tag-chocolatey","tag-conceptual-maps","tag-graphviz","tag-mind-maps","tag-pydot","tag-python"],"avopt_banners_inside_post":true,"avopt_banners_on_page":true,"av_copy_from":"","av_sharing_message":"","av_sharing_allowed":true,"av_sharing_on":{"fb":[],"tw":[]},"av_allow_affiliate_banner":false,"av_allow_affiliate_multi_banner":false,"av_show_affiliation_buy_button":false,"av_post_rating":true,"av_have_post_rating_value":false,"av_is_artificial_intelligence_content":false,"_links":{"self":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/4572","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/comments?post=4572"}],"version-history":[{"count":11,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/4572\/revisions"}],"predecessor-version":[{"id":7349,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/4572\/revisions\/7349"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media\/4575"}],"wp:attachment":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media?parent=4572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/categories?post=4572"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/tags?post=4572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}