通过聚会获取数据 API javascript

Getting data with Meetups API javascript

我正在尝试使用带有 API 密钥的聚会 API,但我被 CORS 阻止了。

我正在使用聚会给出的示例:https://api.meetup.com/2/events?key=mykey&group_urlname=ny-tech&sign=true,将 API 键替换为我的 API 键。本例来自here.

这是我的代码(我取出了我的密钥并用 替换了它):

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<button id="find">find</button>
 <script>
        $("#find").click( function(){
          $.getJSON("https://api.meetup.com/2/events?key=<key>&group_urlname=ny-tech&sign=true", function(data){
            console.log(data);
          });
        });
</script>

我遇到了这些错误:

Access to XMLHttpRequest at 'https://api.meetup.com/2/events?key=aKey&group_urlname=ny-tech&sign=true' from origin 'http://127.0.0.1:5500' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. test.html:18

Cross-Origin Read Blocking (CORB) blocked cross-origin response https://api.meetup.com/2/events?key=aKey&group_urlname=ny-tech&sign=true with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.

我是 API 的新手,我对这里发生的事情感到困惑。我知道聚会 API 上的某些 API 请求需要 OAuth,我仍在努力掌握这一点。 但是,由于这是文档中用于 API 密钥而不是 OAuth 的示例,我希望它能与我的 API 密钥一起使用。当我简单地将它粘贴到浏览器中时请求有效,但当我使用 jQuery 获取它时无效。

文档中有几个地方谈到了 CORS: Here 文档说

"you must be using OAuth to benefit from CORS."

here

While we support key-based authentication for first-party applications, we require OAuth for third-party applications that take actions on behalf of other users.

我不代表其他用户采取行动。但我是第三方应用程序吗?什么是第一方应用程序?在什么情况下我提出的请求会起作用?

看起来 Meetup 只允许通过 OAuth 验证请求的 CORS – reading this issue

一种方法是使用 jsonP。获得生成的 API 签名 URL 后,您可以添加 ?callback=? 作为第一个参数,它将为您工作。

下面是一个例子

$("#find").click(function() {
  $.getJSON("https://api.meetup.com/2/events?callback=?&offset=0&format=json&limited_events=False&group_urlname=ny-tech&page=200&fields=&order=time&desc=false&status=upcoming&sig_id=SIGID&sig=SIG", function(data) {
    console.log(data);
  }).fail(function(jqxhr, textStatus, error) {
    console.log("error", textStatus);
  })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<button id="find">find</button>