首页 > 解决方案 > 你如何检查一个 Scratch 项目是否通过它的 ID 共享?

问题描述

我不希望很多人知道这一点,但是有没有办法检查 Scratch 项目 ID 是否属于共享项目?例如,项目 ID 3是一个实际项目,但未共享 - 而 ID 399293697是共享的。那么如何查看这些是否共享或不使用 JavaScript 呢?

标签: javascriptmit-scratch

解决方案


我搜索了有关 Scratch API 的 wiki 文章,但这并没有帮助。那里提到的唯一有用的端点需要您知道项目的所有者。

通过实验,我发现这些端点是有效的。

第一个返回 HTTP 404(未找到),第二个返回 HTTP 200(OK)以及有关项目的详细信息。

笔记:

  • 我认为没有办法区分非共享项目和不存在的项目;他们都产生404。
  • 由于同源策略,我认为您不能直接从在 Web 浏览器中运行的 JavaScript 访问这些端点。在您自己的浏览器上,您可以暂时关闭它。对于更结构化的解决方案,请使用CORS 代理

下面是一个测试单个项目 ID 是否存在的 JavaScript 示例。它使用yacdn.org,这是众多免费 CORS 代理之一。

这只是一个概念证明。我不能保证它适用于大规模查询;许多免费代理会限制您的流量。托管自己的代理可能会更好。

function TestProjectId() {
    const id = document.getElementById('projectId').value;
    const url = 'https://yacdn.org/proxy/https://api.scratch.mit.edu/projects/' + id;
    fetch(url, {method: 'HEAD'})
        .then(response => { document.getElementById('answer').innerHTML = response.ok; });
}
<input type="text" id="projectId" value="399293697" />
<button onclick="TestProjectId()">Test it!</button>
<div id="answer">(answer will appear here)</div>


推荐阅读