XHR获取github的参与信息

发布于 2024-12-24 19:17:28 字数 265 浏览 1 评论 0 原文

我正在编写一个简单的小部件,它可以呈现画布参与图,就像 github 上的一样。

它使用 http://github.com/[user]/[repo]/graphs/participation 上的数据

该小部件运行良好并且基本完成。我遇到的唯一问题是,当我尝试通过 XHR 从上述链接检索 json 数据时(而不是像以前那样只是复制并粘贴到小部件中),我遇到了同源访问控制问题。

有什么方法可以通过 XHR 或某些隐藏的 github api 功能来访问这些信息?

I am writing a simple widget that renders a canvas participation graph just like the one's on github.

It uses the data at http://github.com/[user]/[repo]/graphs/participation

The widget works great and is basically done. The only problem I have is when I try to retrieve the json data from the above link via XHR (rather than just copying and pasting into the widget as I have been), I run into the same origin access control problem.

Is there any way I can access this information at all, either via XHR or some hidden github api feature?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

水中月 2024-12-31 19:17:28

我相信 Github 通过其 CORS .github.com/v3/" rel="nofollow">API。您还可以设置服务器端代理,通过该代理向同源页面发出 XHR 请求,然后该页面向 Github 发出服务器端请求。


要回答您有关代理的问题,是的,这非常简单。实际上,大约两年前我就使用 Python 和 Tornado 完成了这件事。我意识到这不是 PHP,但它读起来足够接近英语,可以让您了解它是如何工作的。这个特定的代理返回了原始要点。

# /proxy/gist
class GetGistHandler(BaseHandler):
    def get(self, id, filename):
        url = 'http://gist.github.com/raw/%s/%s' % (id, urllib.quote(filename))
        resp = urlfetch.fetch(url)
        self.finish(resp.content)

然后它可以与类似的东西一起食用

$.ajax({
    url: '/proxy/gist',
    dataType: 'JSON',
    data: {
        id: $('#id').val(),
        filename: $('#filename').val()
    },
    success: function(json) {
        // ...
    }
});

I believe Github supports JSONP and CORS through its API. You could also setup a server-side proxy, through which XHR requests are made to a same-origin page which then does a server-side request to Github.


To answer your question about the proxy, yes it's very simple. I had actually done this exact thing about two years ago using Python and Tornado. I realize this isn't PHP, but it reads close enough to english to give you the idea about how it works. This particular proxy was returning a raw gist.

# /proxy/gist
class GetGistHandler(BaseHandler):
    def get(self, id, filename):
        url = 'http://gist.github.com/raw/%s/%s' % (id, urllib.quote(filename))
        resp = urlfetch.fetch(url)
        self.finish(resp.content)

It can then be consumed with something along the lines of

$.ajax({
    url: '/proxy/gist',
    dataType: 'JSON',
    data: {
        id: $('#id').val(),
        filename: $('#filename').val()
    },
    success: function(json) {
        // ...
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文