Spaces:
Running
Running
File size: 21,194 Bytes
aa34b1f b90a3da b9ed792 9194514 aa34b1f c50d4fc 6415f78 aa34b1f dff1837 aa34b1f f9bd988 aa34b1f 14fbe6d 6415f78 14fbe6d 6415f78 14fbe6d f9bd988 aa34b1f 3294248 b80eb1d 3294248 b80eb1d 3294248 22c0846 b80eb1d d21fe3f dd59982 d21fe3f 22c0846 3294248 b80eb1d 3294248 22c0846 d21fe3f 22c0846 d21fe3f b80eb1d d21fe3f 22c0846 aa34b1f e73bcbd aa34b1f 14fbe6d 4091161 aa34b1f 244ca67 14fbe6d 3294248 244ca67 e73bcbd aa34b1f 1a5b0c0 b9ed792 dcc513f 2713c62 6415f78 2713c62 dcc513f dd59982 dcc513f 2713c62 dcc513f 2713c62 dcc513f 2713c62 aa34b1f 14fbe6d aa34b1f db9b48e 6415f78 14fbe6d 244ca67 38f470f aa30616 ea7c078 aa30616 aa34b1f 1285c5d aa34b1f dfaac2c b9ed792 aa34b1f dfaac2c aa34b1f 72c7a0a aa34b1f b90a3da 1285c5d 72c7a0a 14fbe6d 1a5b0c0 1fdb912 6415f78 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 |
import os
import html
import re
import time
import requests
import dotenv
import mistune
from gradio_client import Client
from image import fetch_image
dotenv.load_dotenv()
access_key = os.getenv('ACCESS_KEY')
client_id = os.getenv('CLIENT_ID')
client_secret = os.getenv('CLIENT_SECRET')
refresh_token = os.getenv('REFRESH_TOKEN')
blog_id = os.getenv('BLOG_ID')
imgbb_api_key = os.getenv('IMGBB_API_KEY')
def generate_post_html(doi, title, category, summary, mindmap, citation):
doi = doi.split("https://")[-1]
print(f"Generating post for {doi}")
title = title.replace("{", r'{').replace("}", r'}')
title = re.sub(r"\\(?![a-zA-Z])", r"", title)
summary = summary.replace("{", r'{').replace("}", r'}')
mindmap = mindmap.replace("{", r'{').replace("}", r'}')
citation = citation.replace("{", r'{').replace("}", r'}')
citation = mistune.html(citation.replace("&", "&").strip())
image = fetch_image(title, summary, imgbb_api_key)
html_summary = mistune.html(summary)
post = f"""
<div id="paper_post">
<script>
window.markmap = {{
autoLoader: {{
toolbar: true,
}},
}};
</script>
<script src="https://cdn.jsdelivr.net/npm/markmap-autoloader@latest"></script>
<script>
window.addEventListener('load', function() {{
setTimeout(function() {{
const element = document.querySelector('div.mm-toolbar-item[title="Fit window size"]');
console.log(element);
if (element) {{
element.click();
}} else {{
console.log('Element not found');
}}
}}, 0);
}});
</script>
<script>
window.addEventListener('load', function() {{
const anchor = document.querySelector('a.mm-toolbar-brand');
if (anchor) {{
anchor.href = '/';
const img = anchor.querySelector('img');
if (img) {{
img.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAFe1JREFUaIF9mtmvZMlx3n8RmWepU8vde+/pWTkiKVHUiIL0YgmSYcCA7P/WDwZswaQNGRRNmZIoixouMz29375brWfLJfxQt0laIp2Fesk6hRPrlxFfpPD/WYLipHAYRWTIwPjutyN/yof1t49P9aOPJpy8P7HThwu5eza1kyPNbhFymMYUKjPFqx+86s40rHd2ebOyNxetXr8cZfn00r78xRfDj65v4uWvv7r0VIoQkoVk5N8qo/9togNiZIs2JJDk8DgpnJOiKmmaM/nwzizdeziheTT17v7c57PDYjicunZRiJtmjRMjFSCo+EB2k2hxUkWbFKlo1qlu2jibjfHO4V338Usz93a0rk0WhmhhjIxg9k4eETDDfrOk/+/G3u6GaSZl2P/rUO9yWr5378g/+LTh+ONpPn1varOzealHhw3zo1k5O2qm9XwynVSlK11phffJqRNydikMLnQ9YzsM3WZo+2XbbpfbcbPsh5utbS62cvOsteXPbsKrn74dnr25sfNfiqQ4FSRn0r9S4jd4QLh9ML3bOXD33OPiG/c/nHz7O4/KT/9szp0/luw+EO0W88XanZ22nB1HOZgHa2Zb1zRKM0XqxvAexkFYL8VWN7Dbauo6L8vN1G6WM9brOoUwXYfsv1ymq++/0s+/V+Uf/dCivFnmNwmwTErC/vNbFRAcYBhZ3ll9rsfutHh89171O58+Kj/97En54Xfuu3t/eODnn2gdKY4KTh8q9x+UHB2PVHXGl5lJnWnmwExADXaJg/NA00S2K+fjUHB3dLStZ3VVsr5cNOubxb0qHp5639wrZ7MPF+ns7172n//zZXj+dpOvkmEYJoIaCMbevu6dAg7PryeLw/Ok+t27vzP5N9/5oP6jvzwtHv+HuSs/m1btvfnhjR4/WnPv45H3PoF77ysHZ55yXuEnBUXlcBVQuP0rRui7yDgEYo4UVWS6yBwcRaqmJ+Qd665lN4wHSPVoVp48OSzvNrXMu9Ha1TKeb9/JJoDifimr32+ZGKaGJcVLrVN/Ujw6e7/51mdPyt/7t3Pu/5nk/C03WePubJm9F7q7j104uVO4xVxViywhqZqWIubIIcq4S3srGcTRGHowVSubjDqzskxZJRmTlAe/TX25KuKrZrK6OTgJ48FJbY+dq4s8yI7Otv/7Kry46PMuZCJGdkAGMXebsGZkBWymR+Xj6pv3Pp5+57Mn02/9+0N37y905EOlKxdnkQdfL9OH32rsvQ8rO5onpW+lvdnosOuFGMWRSGMv7aplc9NKtxkkDhERKCvHdF7QzAqKQjHEfAmLY8fJHeebWjQNJt1WSNHPvZucFL72hdStmm4G2/SDdckwBbKgeBWn2VICkiCcFI9OPpx89gfvN7//F4vy7M8t5m8EXdLMYj55UIXHn8zl/U+q6mjSV/G6p9t07K52mAh5FtCmJFti6Eb6fkSAsi4oJxWTecVsViJe6beBGAIeY3HkKe97FlPGGLKt223RXqepMP/mqb4vpUxjSU1vmx9u0vXrdwDjxKtTcQ4kF1Qs/J3i/eZb3/qg+YO/PCnf+1Ol+FqUnS9mu3DykPDka2V68r7Xk0Xy0m5oL9e0656QBPEOUcEMkimmDi09Re0p6oJyUlJNKsqmhNKTE4xdIgXDqeBLhzkXR3WxTZLbgIxjoZqaee2mU1G0zZu327B6lS1lABWnzjBR1GZ6zKP66w8/mn32787qJ//RWfX1GPvKl73cfZjGjz8t/EcfUBw3rcubG9bnN7K+aQGlWVRM5yVl6RAB7x31pGA6r2imJVXt8d7hnOAUxDIpZcIQ6Hcju/VA20bDO60PZt43tQyDj5ulFX0nDtUjV/gpcNnH7lmftuuRlkxSb2QzRA6KO6dPmm//4aPpN/90ovOvdUNX59Tlo0kcP3qo/P5H2d8/HWTc7bi4aFltsuE8B4deFjPPdCqgkMZMioZYwntDnMNMCDFiw4glwZxiWclAH812Nz3VGrlbFXL/jqOeNLq9jPH8aTcsr7eFuKqeFIdfezT93T/dhd0Xm3TRL8fXl2Dm98kg5aK8++n9yad/flp/8EdjaqcbWeN8SPPG9N6hyd1FNO9GWXcjN1tlkxuaeY1NBFwEb1AJzgu6Geh3AyGCeg9OiSkTY8I7QQvP6Cb0VPROGSXi84imCC7QVNmaSXZVFcVcTAnRwp9Op8XJdzZh+fT58A+Xz0dWwOi9lMzc0cFhde/ri+rOnxTu4EFvwcQzVIqWE1cOGG96Mc3eLmLN9cSL1FPhqGSsM9c2MIRAkTNpjCw3ieX1yNhHVDPeC04VQfFVgW8mWD0lVDXhIEm2ii50vLHC1kuhHYKshlRqAVVtY2/0GV8Vfv7woLrzJ8f1w/9zONz/vI3LC39SPqkOirO7i+L0iTj//mCBwVKWQoKvnW8Lz+ddwZeXlei8Nq0807nncO5xM0fnhJs+Mex6wqql37Rcr0uutw3d2KN5pNHIvCpoJlOqckZVzJlMpzRNgcdgPrDcDTwbEu25MayS9DeZnYJrfNJR42ih6HLv1BXvn1SP33u/+fbdXbxZ+jvVB0cH1d1Hk+LoLBJnXd4SCZp9qe3E5b6oeRomWLfg8OiAJ/cn3Dtz3JlmJoXRmWe1U87PW86vr7larrncRJbR6EKPhA1z6TnTgjuLAw4Ojjm8c0h5MmEy98wKox+hXUWu3+z46vmK5WpF7jKFClJJJpca86htWhFJ80V5/+yD6XcednH91h+UD96bl2ePvZ8dJsnOrI1C9IOr3GVRWVfNrZhMuHMw5ezBQj75ZM4nD0pOq4SzxDYpRQupqrnuhG5Xsx6MdXZ0BGBLdi1NA3YyY/7oiAfvHXH3tOHO1DMrhWCOyTZhi5XsUsHVFjtfOYJLzBQ9cipNjpItxiTZ1cXxUeVmj0Pqr3xTHn9Q+vk9cZM5IngXJedkHZ4XaSHBH/PRScU3PnDyJx8JHz8ILA4Ebiv0hSWaKjNVgzwhaUH2ir5x7AYj6yHzacfxSeDufceHjyo+eug5nAta7IubUjLvVTDXkpnNISW5bL09v+mYxlFqMxYum2AyZEVdPXe+vl/m6cYv6ruPnWtOCzedifPinDkvEBKy7YQiOXlwWPDZY/jmSYv211zcBLqQKb1QFZ66KFj4gvfOCkKosd6hS8fVDSRqTiYN9096Ht0J3F0Yk7ymv850Y2QMIylnJoVnPqn5xoOStp3z9JXJ05+N7HqTgOEqEUWdREuSdYZyquo6f1DfP0X8oUpVIRBcJiv4Lsl0t2PeVjxQx2ldmKVevnrzip8+Pedmt6OpPcfzA04Pjzk8OcLVCxa157CGy1t0FRMm6ljUnlmdIPdcXLZcXy25vFmy3KwYx8jxwYyPnzzk7t2H3JmW9rBwcjZmdn0UVwrZFQBYMhAqEw4MOt+UJ4cmsrBstYnpoAYmVES5M26Y7wRZl1ys55JLuNiOXK+WXN8s2VQFFqEqGnyTGENms4r0OyFHwaEohsVE3yW2baKpEpICq23LxfUNVzdX5JiAxPnmiLEauFqK+G3g7hjYWpJSPEFlXzcrKkgtysKMzosrDgWbZcs1kmS87TIrNU5dxA8d5296fvR8xoeTCfdPTvimG1hdzxiS4+T4gPt3D5Cy5uml8vyV8fY8k0c4rBUzgRB5e5HwTWRSK4/PpjRVpiqFw9mESSkcnhxAc8gX18Yvvthx/qZlGjN1oTgvjGYI8q7nrUxsBvQ+kuaCNSZWIFg2wcwonEhZCmPKvLwILJ9lqrsNv/PpQx4/PiJsela9MZ2VzOYVN2vPcqW8fAGrt0oTlaNJARjrmLh6KyQV7hyXfPpeyeHdA04OT2l3I4dTTzGt+eLaePZlx4+/2NK/HTjI0Ey8BBWCgYihgiGUII0pCx8l1mJWiohHVUSEDGSvImokEcIusX0z8vZ5w4ujKdMHM2ZVovaZqPBmDS9fGa+fG+2FYTuHc4qv92jlgsd2FbsL4/Vz4elJwSPzlG5CPRWSdyy38Oxly/mzls15gjaTRMhexRTstp0XEUHwIKWI1B4BQ/bqCfseNkNUIaKgcJhHinXL+hcF3++Nr+55Hh7CrDa6IfPqGt6+FtavhHrnmJhSmBBCAoEiCwtqrFVefznSDSP37g/cPXZU3rHu4Pll4OXLns3LwFEPpvvicMjsIfuWP8l6G0oIqODVF72Z1ZglA0NsX1WaWEIpxJjZSL3b0r1Qfn5lvHpe8eYETqZG2xkv3jq2S888Oo7EUTghmhFD2OO8KY2WhOS4eWtcXAVePx+5fypMasfFJvP8fKRdjszGwGFIRIWtCqOZOQEVwdiTQ4ZFYBSx3osrNphVZjlgSYx8q7GYqGJkxnFEzLDkqWKNZ0I/KNdqDIORd0o1OkpVfCE4Yd+y5lvmQMCxL6GrUBJ6I42O1Q76SulDptgIdRfRMRDDQIgBEwOnZvKOTDEQxJAAtGBrH4grEWrEhlvm4pZnEZwIloXNGGmjMStHTovE3CnaV6RBKKNxBlDsHUuGeOt292u0U7I9izD3jplvINewA+2FgzIzqzs2eWA5RFb9QMoZr/smCIN8y9LtHSE9sDVY+d1wdePU1c5VfeHqLLeUhWC2zw8YkyBmVucgSkuRJ2j0MJR4UwpvOE1ES4QsxKSYeQwPKqhElICXiHfgpCRTEKMACc0DSQNORqJFBjMDxKmgTixnyLYnGA3LQA+2BpZ+1b2+LH09qavD3vkK7wosR7IFAwNVnPeImIQcWLYbsimNCKUu0FyRs0FIqARKwJlnzI5kcBsFFBJxRCxCMsFQVMEk0Ict23TDulsTcsR5J9g+kRNmexS6Tea9IwaDFXDlN8P58wkHE/XlbiJHJk4TiOZbnwli3guIyZgSN21HyILVBb4oceJJEXJMlDJQ+wQqJDdge/YDtYhkSDjG6IiWER/R0kjSsR3XXHUrdn1LToZzCnvkxCQbKHuAIee9d7YZLnNOz30br5+qdweVHW4MM1FvWJLbkLN9PguGWcqIhcigI2PREcseryWOAkmGt0hJTzWJ+BK8BCwEQhD6NKPLCyRWOBRcwhgZaOlSSx9GQkzoHroN5JeQg5iIqAiaTcxCGjYhhfOQ+qd+Pbx6bpJO6upgaWrZOe+TBct5DyGiiMk+iQzMshBTkiEPDLmjoKLKikuKy4roXpFGI5X2WBzosmdMNZYUTQVOhJwH+jzQ0zGkkZQylsVMIYuJyJ6iyTlnDArvzWlRpDiGtr9crtuL533YPPPX219cD3H9oqmPL0zyzhVVQx5yJmcQv49T9qkj+zhMAoNEegZqBmqrcObAamIyhrEAIlEqLASG4AipgVTg8j72R8tERgYGRol7Svn2wDIRRPceSDkrYrH0PlflxI3dcrfuv7x4cfXjF924uvbL7dNhGFevTxYffZWVr7RoziR1moMVYGoi2L4AuT3LDXMQvRFdJKcIOaHZAzUhO+JgdMO7yDWSQRYFczgzJAPZSJKJmkjeMGfgZI/iipmK5CxkyQ4QcaW6YkFsX321bF88e33zwzf9uBx8yoO1482qC9ufjDl/P4p7lEXumVgNBBMLt0o4M1GzvFdIsayGxSwSE5oyqJDFEzNYUsgORBCXUQk4yTgL5CSYy2Qzst6ijIqY3lYJKjmLxiwJ0yggdcLRxcnrTV98f73b/vOmO19BxAOKSBji8NPNsPrudNi8b6S/EOcawJlqMJFsiL+dPN26ef/FDEkZjRlxAi7vH7M9ZbzHsYxYxpmhCSwb5EzORr6dSJjsax9EMEXMiCaq6l2BQci2226GH16shu9uu/w5uABRnaDqXJkLP9+pTlrnyplz7qFzxaGo9wg+W4wZs/2ERPakfKFSOi9NrpmONWWoIAmWQJPhM3gzfM5IyhCB4NDsEBFCGdkWHVtppU9BUjSzbHuoJKdsOYtQO6+o80M/xp+eX5//p5cX//hfl9t/ehnzOZDUOS0dlnPKgT4sO5Hs6mo+rarFVF15mC36RGDPXmsUVXDqTQWHo6FmlhuqXGPBkwaBoLgk+KxoVCwIafRY9Dgt0FoY6pGV27HKLX1KWEYECQYhEy1b9KLOOVcOZny+3r7+Hy8v/uavXl/99U/68Wkytjh1zql4SXmwELe0/euEhVCW87EoZl5deSyqp6g41DkVMUQ0i7lERsyotKDRgokoPmc0RxwZpxlRAzVEMkrG+YSvE3kW2JYt12xZhh1DircAJwkRMZFSVL2qElP4+a67/O7lzT/+t9dX3/3x9eoHy2xLzEZEnPh3VDWYM0vpZv2zy7KY/u2YWs6Of08PF0/MF9MnZrnJaaxyGnJKqc9ZoqSkazY6dUmayUaOKpUqGZZVAkJABaAgW0kGNesdbL3Z0gbbxJ0NYcghhZwF7/CFusI5rRDRNqb2q+X22Xcvrv/xry6v//5H690/X+5jEQeknGP2+zbgNjMxhrAZ31z9/Zt2WP4vsFxWszzz9Z8h8rsmkEUENAukZMg29Xajvcwr43gSWZSGitAlpc8KwEQzE5eJZvSjsO49153QJiyDqWhCcHlf9mMiGPmLtr/63sX1j//Ls1f//W8326/ejmEbeFcS2X6O7bkFd9UimRlmwYZxNV4tf/KirhZWFDMNcZDJ5DiV5exxWRwdeF82liIpBxKRDQNLHTgtdhw3PVMfabIRbyeiTgBV1tGzs4pVP2VrFUkryrLGuQJRT4xjSqld9ePNs66//p83N5//1durv/vh1fInL3MOt4V5iYgksxGwX00p+eUcdl/ymWVi6rq2v1qPYXNh2GVZLoZJczZtJidH3pfYbZ2f0f3pSUBzT5VbZnnLnC0Ta0kxsArwqit43je8HadsUwVSUhQNdX1AUc5JFr/atW//+vL6n/7z6/MffPfV2x/8w3L9xfkYNvmdKUR039jcjll/2XGYxdtKVfc9JZm2u4htd/Fiu3v9pu0vfzbG9sshbs9nkzt/7NQ9yTnNUs4OccQoGoeJdW3WXYnsPCzc/mrFMlW8jlNejDM7DxNbJWHIQ8Y6XNikfrjappy+2nZv/+b6+vPvnb/92x9cXP79q137Ov7KwIqI2d7yv272f7UUESeQ1fbDPwCm0wcs5k8eTqf3vjapjj6ZNmeP6+rkji/mh841M++ns2lR1QeFTo58qA61L2oZHUBnZVrlSbiOxbAac9+mvotxu02x24awuen7q4u2u3jeDTc/2+3e/HS9+erlbvfqV0KKc6AZS/YvL378BgV+uS2/um0hiDicK51qUXs/aY4PP753dPjp4+n0/qOyXNypqqOzZnJy0NSLg0J1KhYn5FjubVKMGd+FnHZtv163/dVyGG4uxnF9vtu9enFz89MXN6ufv4mxa3MOfUpjMku86172abtvCf7l+i23VQzARBTVwplR5jzEGGMAduO42mF2UZSLC/XVCrGNL4rW5OA0qO87rQ66aLMxpwqgEjfUKlunwypLuIl5ezGG1etuuPlq2775+fXyZ2+77vzXBShUKydCyDkks/yvJb9d/xfNailUP1oiJgAAAABJRU5ErkJggg==';
img.alt = 'ReXplore';
}}
const span = anchor.querySelector('span');
if (span) {{
span.textContent = 'ReXplore';
}}
}} else {{
console.log('Anchor element not found');
}}
}});
</script>
<style>
.markmap {{
position: relative;
}}
.markmap > svg {{
width: 100%;
border: 2px solid #000;
height: 80dvh;
}}
</style>
<img style="display:block; width:100%; height:100%;" id="paper_image"
src="{image.strip()}"
alt="{title.strip()}">
<br>
<b>{{getToc}} $title={{Table of Contents}}</b>
<br>
<div id="paper_summary">
{html_summary.replace("&", "&").strip()}
</div>
<br>
<h2>Mindmap</h2>
<p><small><em>If MindMap doesn't load, go to the <a href="/">Homepage</a> and visit blog again or <a
href="/#">Switch to Android App (Under Development)</a>.</em></small></p>
<div class="markmap" id="paper_mindmap">
<script type="text/template">
{mindmap.replace("&", "&").replace(":", "=>").strip()}
</script>
</div>
<br>
<h2>Citation</h2>
<div id="paper_citation">
{mistune.html(citation.replace("&", "&").strip())}
</div>
</div>
"""
return post, image
def create_post(doi, title, category, summary, mindmap, citation):
post_title = title
post_category = f"{category}"
try:
post_body, post_image = generate_post_html(doi, title, category, summary, mindmap, citation)
# with open('post.html', 'w') as f:
# f.write(post_body)
# exit(code=0)
except Exception as e:
print(f"Error generating post: {e}")
return None, None, None, None
return post_title, post_category, post_body, post_image
def post_post(title, category, body, image):
title = re.sub(r"\\(?![a-zA-Z])", r"", title)
response = None
try:
data = requests.post(
url='https://oauth2.googleapis.com/token',
data={
'grant_type': 'refresh_token',
'client_secret': client_secret,
'refresh_token': refresh_token,
'client_id': client_id,
},
).json()
url = f"https://blogger.googleapis.com/v3/blogs/{blog_id}/posts"
headers = {
'Authorization': f"Bearer {data['access_token']}",
"content-type": "application/json"
}
post_data = {
"kind": "blogger#post",
"blog": {
"id": blog_id
},
"images": [{
"url": image
}],
"title": title,
"content": body,
"labels": [category, "ZZZZZZZZZ"]
}
response = requests.post(url, headers=headers, json=post_data).json()
if response['status'] != 'LIVE':
print(response)
if response['status'] == 'LIVE':
print(f"The post '{title}' is {response['status']}")
return True
else:
print(response)
print(f"Error posting {title}: {response}")
return False
except Exception as e:
print(response)
print(f"Error posting {title}: {e}")
return False
def post_blog(doi, title, category, summary, mindmap, citation, uaccess_key, wait_time=5):
if uaccess_key != access_key:
return False
else:
status = True
post_title, post_category, post_body, post_image = create_post(doi, title, category, summary, mindmap, citation)
if not all([post_title, post_category, post_body, post_image]):
print(f'Failed to create post {post_title}')
return False
post_title = post_title.replace("&", "&")
if "&" in post_title:
return False
status = post_post(post_title, post_category, post_body, post_image)
print(f"Waiting for {wait_time*60} seconds...")
time.sleep(wait_time*60)
if status:
print('Post created successfully')
return True
else:
print('Failed to create post')
return False
def test(uaccess_key):
data = {
"status": "success",
"Astrophysics": {
"2412.16344": {
"id": "2412.20276",
"doi": "https://doi.org/10.48550/arXiv.2412.20276",
"title": "From Painlev\xe9 equations to ${\cal N}=2$ susy gauge theories: prolegomena TDI-$\\infty$",
"category": "Astrophysics",
"citation": "Nair, D. G., Nagar, N. M., Ramakrishnan, V., Wielgus, M., Arratia, V., Krichbaum, T. P., Zhang, X. A., Ricarte, A., S., S., Hernández-Yévenes, J., Ford, N. M., Bandyopadhyay, B., Gurwell, M., Burridge, R., Pesce, D. W., Doeleman, S. S., Kim, J.-Y., Kim, D., Janssen, M., ⦠Zensus, J. A. (2024). Demographics of black holes at $<$100 R$_{\\rm g}$ scales: accretion flows, jets, and shadows (Version 1). arXiv. https://doi.org/10.48550/ARXIV.2412.20276",
"summary": "## Summary\nThe Event Horizon Telescope (EHT) has imaged supermassive black holes (SMBHs) in M87 and Sgr A*, testing General Relativity and constraining black hole mass. The EHT has also imaged inner jets of several SMBHs, but at coarser resolutions than 100 Rg. The \"Event Horizon and Environs\" (ETHER) sample is a comprehensive database of SMBH mass estimates, radio to hard X-ray flux densities, and spectral energy distribution information.\n\n## Highlights\n- The EHT has imaged SMBH shadows in M87 and Sgr A*, testing General Relativity and constraining black hole mass.\n- The EHT has imaged the inner jets of several SMBHs, but at coarser resolutions than 100 Rg.\n- The ETHER sample is a comprehensive database of SMBH mass estimates, radio to hard X-ray flux densities, and spectral energy distribution information.\n- The ETHER database includes predictions for the 230 GHz and 345 GHz flux densities in the EHT field of view for approximately 40,000 SMBHs.\n- The 43 GHz VLBA is the highest frequency sensitive phase-referenced VLBI network, providing valuable constraints for SED modeling.\n- The ngEHT is expected to measure approximately 50 SMBH masses, 30 SMBH spins, and 7 SMBH shadows.\n- The ngEHT will enable demographic studies of SMBHs, testing General Relativity and constraining black hole mass.\n\n## Key Insights\n- The EHT's ability to image SMBH shadows and inner jets has opened a new window into understanding these enigmatic objects, allowing for tests of General Relativity and constraints on black hole mass.\n- The ETHER sample provides a comprehensive database for identifying and optimizing target selection for the EHT and its upgrades, enabling the identification of a \"Gold Sample\" of nearby low-luminosity Active Galactic Nuclei (AGNs) optimal for studying jet bases and potentially imaging black hole shadows.\n- The ngEHT will enable the measurement of approximately 50 SMBH masses, 30 SMBH spins, and 7 SMBH shadows, providing a significant increase in the number of SMBHs that can be studied in detail.\n- The 43 GHz VLBA provides valuable constraints for SED modeling, allowing for the prediction of EHT flux densities and the identification of optimal targets for EHT observations.\n- The ETHER database includes predictions for the 230 GHz and 345 GHz flux densities in the EHT field of view for approximately 40,000 SMBHs, enabling the identification of potential targets for EHT observations.\n- The ngEHT will enable demographic studies of SMBHs, testing General Relativity and constraining black hole mass, and providing insights into the properties of these enigmatic objects.\n- The EHT's ability to image SMBH shadows and inner jets has significant implications for our understanding of these objects and the role they play in the universe, and will continue to be an important area of research in the coming years.",
"mindmap": "## Introduction\n- Event Horizon Telescope (EHT) project introduced\n- Studies black holes with high angular resolution\n- Provides insights into black hole physics\n\n## Black Hole Demographics\n- ETHER database for black hole demographics\n- Contains 3.15 million SMBH mass estimates\n- 20,000 VLBI radio flux densities included\n\n## EHT and ngEHT Capabilities\n- EHT resolves SMBH shadows at 10 Rg scale\n- ngEHT expected to improve imaging capabilities\n- Will study SMBHs with higher angular resolution\n\n## Observational Programs\n- 43 GHz VLBA imaging of ETHER targets\n- 230 GHz EHT+ALMA observations planned\n- GMVA+ALMA observations for deep imaging\n\n## Scientific Goals\n- Study jet launching and accretion flows\n- Investigate black hole physics and GR\n- Measure SMBH masses and spins\n\n## Future Prospects\n- ngEHT will improve imaging capabilities\n- Will enable study of more SMBHs\n- Provide insights into black hole physics\n\n## Collaboration and Funding\n- EHT collaboration for research and development\n- Funding agencies supporting the project\n- International collaboration for astronomy research\n\n## Research and Development\n- Developing new imaging techniques\n- Improving telescope sensitivity and resolution\n- Enhancing data analysis and modeling capabilities\n\n## Challenges and Limitations\n- Overcoming technical challenges and limitations\n- Addressing observational and theoretical uncertainties\n- Improving data quality and interpretation\n\n## Conclusion\n- EHT and ngEHT for black hole research\n- Studying SMBH demographics and physics\n- Advancing our understanding of the universe"
}
}
}
if data['status'] != 'success':
print('Failed to fetch data')
else:
for category, catdata in data.items():
if category != 'status':
for paper_id, paperdata in catdata.items():
title = paperdata['title']
category = paperdata['category']
summary = paperdata.get('summary', '')
mindmap = paperdata.get('mindmap', '')
citation = paperdata.get('citation', '')
uaccess_key = access_key
try:
escaped_title = repr(title.encode('latin1').decode('unicode-escape')).strip()
except:
escaped_title = repr(title).strip()
title = html.escape(str(escaped_title).strip()[1:-1])
try:
encoded_bytes = citation.encode('latin1').decode('utf-8', errors='replace')
except:
encoded_bytes = repr(citation)
citation = html.unescape(encoded_bytes)
status = post_blog("2412.20276", title, category, summary, mindmap, citation, uaccess_key, 0)
print(status)
return status
if __name__ == '__main__':
test(access_key)
|