2012-02-11 32 views
7

GitHub có api jsonp cho nguồn của tệp không? Tôi biết BitBucket có, nhưng tôi không thể tìm thấy bất kỳ thông tin cho GitHubs (giả sử họ có một).GitHub mã nguồn jsonp api

Họ có không? Nếu không, hãy bummer ...

Trả lời

0

Tôi không nghĩ GitHub có API để trích xuất nguồn của tệp. Họ làm có callbacks jsonp dù bằng cách xác định callback = funciton sau bất kỳ cuộc gọi API (ví dụ, curl https://api.github.com?callback=foo)

Bạn có thể có thể sử dụng Trees API để tìm các tập tin nguồn hiện diện trong một kho lưu trữ tại một số cam kết (HEAD của nhánh chính). Sau đó, bạn chỉ có thể có được nguồn bằng cách sử dụng các URL cho phiên bản thô của tập tin (ví dụ, https://raw.github.com/robbyrussell/oh-my-zsh/master/lib/directories.zsh)

3

Một ghi trong GitHub API documentation, bất kỳ cuộc gọi hỗ trợ JSONP chế độ invokation:

Bạn có thể gửi tham số ?callback cho bất kỳ lệnh gọi GET nào để có kết quả được bao bọc trong hàm JSON. Điều này thường được sử dụng khi các trình duyệt muốn nhúng nội dung GitHub vào các trang web bằng cách gặp các vấn đề về miền chéo. Phản hồi bao gồm cùng một đầu ra dữ liệu như API thông thường, cộng với thông tin Tiêu đề HTTP có liên quan.

Nếu để lấy nguồn hiện tại của một tập tin (hoặc bất kỳ phiên bản của nó), bạn phải hoặc là biết SHA của Blob nó đang được lưu trữ trong. Xem Git Database API để biết thêm thông tin về vấn đề này đề tài.

Thường xuyên hơn, người ta không biết SHA, nhưng chỉ có đường dẫn tương đối đến tệp trong thư mục làm việc.

Sau đó, bạn sẽ phải làm theo các bước sau

Chọn một cam kết sha từ danh sách

Lấy cây nó trỏ đến và đi một cách đệ quy liệt kê tất cả các mục (Trees và Blobs)

Tìm các Blob của bạn phù hợp với con đường tìm kiếm, tìm hiểu SHA của nó và áp dụng quy trình đầu tiên

+0

Điều này thật hữu ích! Cảm ơn bạn!! –

8

Có một API để có được nội dung của dữ liệu từ github. Đó là một phần của số v3 github API.

Bạn thực hiện một yêu cầu để

https://api.github.com/repos/{username}/{repository name}/contents/{filepath and name} 

ví dụ https://api.github.com/repos/mono/monodevelop/contents/README

Trừ khi bạn đặt tiêu đề chấp nhận, bạn sẽ nhận được một số JSON với nội dung tệp được mã hóa trong base64. Bạn sẽ phải giải mã điều này, cái gì đó rất dễ dàng trong node.js, nhưng nhiều hơn một nỗi đau trong trình duyệt. Bạn có thể tìm thấy bộ giải mã base64 trong javascript trong các câu hỏi khác trên stackoverflow khá dễ dàng. Một điều cần lưu ý, mã base64 mà bạn lấy lại từ github có các ký tự dòng mới trong nó để làm cho nó có định dạng độc đáo và nhiều bộ giải mã base64 không thể đối phó với dòng mới, vì vậy bạn có thể cần phải loại bỏ chúng hoặc sửa đổi bộ giải mã.

Bạn có thể chỉ muốn nội dung và không cần những thứ khác trong json (chẳng hạn như sha và length, vv), vì vậy bạn có thể làm cho cuộc sống của mình dễ dàng hơn bằng cách đặt tiêu đề Accept thành application/vnd.github.3.raw.

Dưới đây là một ví dụ với chấp nhận tiêu đề sử dụng curl:

curl -i https://api.github.com/repos/mono/monodevelop/contents/README --header "Accept: application/vnd.github.3.raw" 

Bây giờ, nếu bạn đang sử dụng nút hoặc curl, đó có thể là tốt, nhưng nếu bạn đang chạy bên trong trình duyệt, để làm điều đó bạn sẽ cần phải sử dụng CORS. Github chỉ cho phép truy cập từ các máy chủ được đăng ký là Ứng dụng OAuth. Nó không phải là đặc biệt khó khăn để làm điều này, nhưng đối với usecase của tôi (một bookmarketlet), đó không phải là một lựa chọn.

Có cách để truy cập mà không sử dụng CORS và đó là với JSONP, bạn có thể thêm ví dụ: ?callback=_processGithubResponse để có được đầu ra javascript phù hợp để bao gồm với một thẻ script (gọi một hàm gọi là _processGithubResponse với phản hồi). Rất tiếc, bạn không thể đặt tiêu đề chấp nhận trên đó, vì vậy bạn bị kẹt với giải mã base64 trong trường hợp này.

Nếu bạn đang sử dụng node.js, tôi khuyên bạn nên sử dụng node-github giúp API dễ sử dụng hơn một chút.

+0

không hoạt động với phiên bản api hiện tại – rakesh