1<!doctype html> 2<html lang="en"> 3<head> 4<title>Clear barriers for insights with PDF</title> 5<meta name="viewport" content="width=device-width,initial-scale=1">
6<script async type="module">import mermaid from"https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs"</script>
vendor: 1 bytes, line 6
6
7<script async src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/prism.min.js" integrity="sha512-hpZ5pDCF2bRCweL5WoA0/N1elet1KYL5mx3LP555Eg/0ZguaHawxNvEjF6O3rufAChs16HVNhEc6blF/rZoowQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 7
7
8<script async src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/plugins/autoloader/prism-autoloader.min.js" integrity="sha512-sv0slik/5O0JIPdLBCR2A3XDg/1U3WuDEheZfI/DI5n8Yqc3h5kjrnr46FGBNiUAJF7rE4LHKwQ/SoSLRKAxEA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 8
8
9<script async src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/lucide.min.js"></script>
vendor: 1 bytes, line 9
9
10<script>window.addEventListener("load",(()=>{document.querySelectorAll(".callout").forEach((e=>{const t=getComputedStyle(e).getPropertyValue("--callout-icon"),l=t&&t.trim().replace(/^lucide-/,"");if(l){const t=e.querySelector(".callout-title");if(t){const e=document.createElement("div"),c=document.createElement("i");e.appendChild(c),c.setAttribute("icon-name",l),e.setAttribute("class","callout-icon"),t.insertBefore(e,t.firstChild)}}})),lucide.createIcons(),Array.from(document.querySelectorAll(".callout.is-collapsible")).forEach((e=>{e.querySelector(".callout-title").addEventListener("click",(t=>{e.classList.contains("is-collapsed")?e.classList.remove("is-collapsed"):e.classList.add("is-collapsed")}))}))}))</script>
vendor: 1 bytes, line 10
10
11<script async src="https://fastly.jsdelivr.net/npm/[email protected]/dist/force-graph.min.js"></script>
vendor: 1 bytes, line 11
11
12<script async src="https://fastly.jsdelivr.net/npm/@alpinejs/[email protected]/dist/cdn.min.js"></script>
vendor: 1 bytes, line 12
12
13<script src="https://fastly.jsdelivr.net/npm/[email protected]/dist/cdn.min.js" async></script>
13 14<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/themes/prism-okaidia.min.css" integrity="sha512-mIs9kKbaw6JZFfSuo+MovjU+Ntggfoj8RwAmJbVXQ5mkAX5LlgETQEweFPI18humSPHymTb5iikEOKWF7I8ncQ==" crossorigin="anonymous" referrerpolicy="no-referrer" async>
15<script src="https://fastly.jsdelivr.net/npm/[email protected]/dist/fetch.umd.min.js" crossorigin="anonymous" referrerpolicy="no-referrer" async></script>
15 16<link href="/styles/digital-garden-base.css" rel="stylesheet"> 17<link href="/styles/obsidian-base.css" rel="stylesheet"> 18<link href="/styles/_theme.0daa9905.css" rel="stylesheet"> 19<link href="/styles/custom-style.css" rel="stylesheet"> 20<link rel="icon" href="/favicon.ico" sizes="any"> 21<link rel="icon" href="/favicon.svg" type="image/svg+xml"> 22<link rel="apple-touch-icon" href="/apple-touch-icon.png"> 23<link rel="manifest" href="/manifest.webmanifest"> 24<meta name="description" content="a simple workaround to get insights from restricted contents"> 25<meta name="og:description" content="a simple workaround to get insights from restricted contents"> 26<meta name="og:title" content="Clear barriers for insights with PDF"> 27<style></style> 28</head> 29<body class="theme-light markdown-preview-view markdown-rendered markdown-preview-section"> 30<nav class="navbar"> 31<div class="navbar-inner"> 32<ul> 33<li><a href="/">blog</a></li> 34<li><a href="/blog/hi">me</a></li> 35</ul> 36</div> 37</nav> 38<main class="content cm-s-obsidian"> 39<header> 40<h1 data-note-icon="">Clear barriers for insights with PDF</h1> 41<div class="header-meta"> 42<div class="header-tags"> 43</div> 44<div class="timestamps"><div><i icon-name="calendar-plus"></i> <span class="human-date" data-date="2023-09-24T00:00:00"></span></div></div></div> 45</header> 46<p>For both web pages and PDF files, there may be restrictions set by their hosts to prevent bots from accessing them. Since <a href="mailto:[email protected]" target="_blank" class="external-link">[email protected]</a> retrieves the content you provide via its URL, it might not be able to fetch the content in the same manner as you can through a web browser.</p> 47<p>Fortunately, there are some simple workarounds for this accessibility issue, thanks to the PDF feature. Here are a couple of common scenarios and its workaround.</p> 48<h3 id="private-content" tabindex="-1">Private Content</h3> 49<p>There may be certain web pages you wish to use with <a href="mailto:[email protected]" target="_blank" class="external-link">[email protected]</a>. However, due to the host's restrictions, <a href="http://wuko.ai" target="_blank" class="external-link">wuko.ai</a> can't fetch their content directly from the public internet.</p> 50<h3 id="bot-access-control" tabindex="-1">Bot Access Control</h3> 51<p>Some websites utilize measures, such as CAPTCHA, to verify that the visitor is human. <a href="http://wuko.ai" target="_blank" class="external-link">wuko.ai</a> will not be able to retrieve content from these types of websites.</p> 52<h3 id="other-cases" tabindex="-1">Other Cases</h3> 53<p>There may be situations where the URL you provided does not produce the same content when <a href="http://wuko.ai" target="_blank" class="external-link">wuko.ai</a> attempts to fetch it.</p> 54<h3 id="workaround" tabindex="-1">Workaround</h3> 55<p>Follow the steps below to circumvent these issues:</p> 56<ol> 57<li>If dealing with a web page, print it as a PDF and download. If it's already a PDF, simply download it.</li> 58<li>Upload the PDF file to public file hosting services like <a href="https://tmpfiles.org/" target="_blank" class="external-link">https://tmpfiles.org/</a>, then copy the download link once it's uploaded.</li> 59<li>Send the PDF download link to <a href="mailto:[email protected]" target="_blank" class="external-link">[email protected]</a>.</li> 60</ol> 61<p>The crux of this solution is the 2nd step. You need to ensure that the download link generated is publicly accessible to bots, allowing <a href="http://wuko.ai" target="_blank" class="external-link">wuko.ai</a> to fetch its content.</p> 62</main> 63<aside> 64<div class="sidebar"> 65<div class="sidebar-container"> 66<div class="toc"> 67<div class="toc-title-container"> 68<div class="toc-title"> 69On this page 70</div> 71</div> 72<div class="toc-container"> 73<nav class="toc"> 74<ol> 75<li><a href="#private-content">Private Content</a> 76</li> 77<li><a href="#bot-access-control">Bot Access Control</a> 78</li> 79<li><a href="#other-cases">Other Cases</a> 80</li> 81<li><a href="#workaround">Workaround</a> 82</li> 83</ol> 84</nav> 85</div> 86</div> 87</div> 88</div> 89</aside> 90<style>#tooltip-wrapper{background:var(--background-primary);padding:1em;border-radius:4px;overflow:hidden;position:fixed;width:80%;max-width:400px;height:auto;max-height:300px;font-size:.8em;box-shadow:0 5px 10px rgba(0,0,0,.1);opacity:0;transition:opacity .1s;
90unicode-bidi:plaintext;overflow-y:scroll;z-index:10}#tooltip-wrapper:after{content:"";position:absolute;z-index:1;bottom:0;left:0;pointer-events:none;width:100%;unicode-bidi:plaintext;height:75px}</style> 91<div style="opacity:0;display:none" id="tooltip-wrapper"> 92<div id="tooltip-content"> 93</div> 94</div> 95<iframe style="display:none;height:0;width:0" id="link-preview-iframe" src=""> 96</iframe>
97<script>var opacityTimeout,contentTimeout,transitionDurationMs=100,iframe=document.getElementById("link-preview-iframe"),tooltipWrapper=document.getElementById("tooltip-wrapper"),tooltipContent=document.getElementById("tooltip-content"),linkHistories={};function hideTooltip(){opacityTimeout=setTimeout((function(){tooltipWrapper.style.opacity=0,contentTimeout=setTimeout((function(){tooltipContent.innerHTML="",tooltipWrapper.style.display="none"}),transitionDurationMs+1)}),transitionDurationMs)}function showTooltip(t){var e=t.target,o=e.getClientRects()[e.getClientRects().length-1],i=window.pageYOffset||document.documentElement.scrollTop,n=t.target.getAttribute("href");if(-1===n.indexOf("http")||-1!==n.indexOf(window.location.host)){let t=n.split("#")[0];linkHistories[t]?(tooltipContent.innerHTML=linkHistories[t],tooltipWrapper.style.display="block",setTimeout((function(){if(tooltipWrapper.style.opacity=1,-1!=n.indexOf("#")){let t=n.split("#")[1];const e=tooltipWrapper.querySelector(`[id='${t}']`);e.classList.add("referred"),e.scrollIntoView({behavior:"smooth"},!0)}else tooltipWrapper.scroll(0,0)}),1)):(iframe.src=t,iframe.onload=function(){tooltipContentHtml="",tooltipContentHtml+='<div style="font-weight: bold; unicode-bidi: plaintext;">'+iframe.contentWindow.document.querySelector("h1").innerHTML+"</div>",tooltipContentHtml+=iframe.contentWindow.document.querySelector(".content").innerHTML,tooltipContent.innerHTML=tooltipContentHtml,linkHistories[t]=tooltipContentHtml,tooltipWrapper.style.display="block",tooltipWrapper.scrollTop=0,setTimeout((function(){if(tooltipWrapper.style.opacity=1,-1!=n.indexOf("#")){let t=n.split("#")[1];const e=tooltipWrapper.querySelector(`[id='${t}']`);e.classList.add("referred"),console.log(e),e.scrollIntoView({behavior:"smooth"},!0)}else tooltipWrapper.scroll(0,0)}),1)}),tooltipWrapper.style.left=o.left-tooltipWrapper.offsetWidth/2+o.width/2+"px",window.innerHeight-o.top<tooltipWrapper.offsetHeight?tooltipWrapper.style.top=o.top+i-tooltipWrapper.offsetHeight-10+"px":window.innerHeight-o.top>tooltipWrapper.offsetHeight&&(tooltipWrapper.style.top=o.top+i+35+"px"),o.left+o.width/2<tooltipWrapper.offsetWidth/2?tooltipWrapper.style.left="10px":document.body.clientWidth-o.left-o.width/2<tooltipWrapper.offsetWidth/2&&(tooltipWrapper.style.left=document.body.clientWidth-tooltipWrapper.offsetWidth-20+"px")}}function setupListeners(t){t.addEventListener("mouseleave",(function(t){hideTooltip()})),tooltipWrapper.addEventListener("mouseleave",(function(t){hideTooltip()})),t.addEventListener("mouseenter",(function(t){clearTimeout(opacityTimeout),clearTimeout(contentTimeout),showTooltip(t)})),tooltipWrapper.addEventListener("mouseenter",(function(t){clearTimeout(opacityTimeout),clearTimeout(contentTimeout)}))}window.addEventListener("load",(function(t){document.querySelectorAll(".internal-link").forEach(setupListeners),document.querySelectorAll(".backlink-card a").forEach(setupListeners)}))</script>
vendor: 1 bytes, line 97
97
98<script>window.location.hash&&document.getElementById(window.location.hash.slice(1)).classList.add("referred"),window.addEventListener("hashchange",(e=>{const t=e.oldURL.split("#");t[1]&&document.getElementById(t[1]).classList.remove("referred");const n=e.newURL.split("#");n[1]&&document.getElementById(n[1]).classList.add("referred")}),!1);const url_parts=window.location.href.split("#"),url=url_parts[0],referrence=url_parts[1];document.querySelectorAll(".cm-s-obsidian > *[id]").forEach((function(e){e.ondblclick=function(e){const t=url+"#"+e.target.id;navigator.clipboard.writeText(t)}}))</script>
vendor: 1 bytes, line 98
98
99<script src="https://fastly.jsdelivr.net/npm/[email protected]/build/global/luxon.min.js"></script>
vendor: 1 bytes, line 99
99
100<script defer="defer">TIMESTAMP_FORMAT="MMM dd, yyyy",document.querySelectorAll(".human-date").forEach((function(e){date=e.getAttribute("data-date")||e.innerText,parsed_date=luxon.DateTime.fromISO(date),null!=parsed_date.invalid&&(parsed_date=luxon.DateTime.fromSQL(date)),null!=parsed_date.invalid&&(parsed_date=luxon.DateTime.fromHTML(date)),e.innerHTML=parsed_date.toFormat(TIMESTAMP_FORMAT)}))</script>
vendor: 1 bytes, line 100
100
101<script defer="defer" src="/_vercel/insights/script.js"></script>
vendor: 1 bytes, line 101
101
102<script defer="defer" src="/_vercel/speed-insights/script.js"></script>
vendor: 1 bytes, line 102
102
103<script src="https://hypothes.is/embed.js" async></script>
vendor: 1 bytes, line 103
103
104<script>lucide.createIcons({attrs:{class:["svg-icon"]}})</script>
104 105</body> 106</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.