龙腾道
龙腾道

Reputation: 51

How to get GitHub edit history of issue and issue comments via API?

I only found API to get issue list, issue content, issue comments list and content, no issue content edit history, no issue comments edit history.

Upvotes: 5

Views: 1902

Answers (3)

Keif Gwinn
Keif Gwinn

Reputation: 21

Anyone attending in 2023 this is available in the GraphQL API for github, which seems to be the place to get the functionality you're looking for, as I recently found trying to find out how to use the tracking issues functionality.

Here's a good reference for the GraphQL query

https://github.com/orgs/community/discussions/33551

Upvotes: 1

Ashleigh Basil
Ashleigh Basil

Reputation: 111

No, this cannot currently be done purely from the API.

However, if we reverse engineer the way GitHub loads past edits in the web interface, and do a bit of scraping, we can accomplish the same thing without the API. Unfortunately, this means that we don't have the reliability of an API - GitHub's web interface is liable to change at any time, breaking our code. But it's better than nothing!

So, first we need a log of all the edits for a comment. Let's do this with the comment https://github.com/seisvelas/crypsee/issues/1#issue-874033952 (from a test repo provided by the gentleman who set the bounty on this question). On order to get a log of this issue's comments, we will need to base64 encode the issue number with '05:' then the word 'Issue' at the beginning. Why '05:'? I have no idea. But it's always there and it won't work with out it. So we'll be base64 encoding the string "05:Issue874033952", which gives us MDU6SXNzdWU4NzQwMzM5NTI=

Great, now we insert MDU6SXNzdWU4NzQwMzM5NTI= into this URL scheme: https://github.com/_render_node/{BASE64 ENCODING HERE}/comments/comment_edit_history_log, resulting in a link to https://github.com/_render_node/MDU6SXNzdWU4NzQwMzM5NTI=/comments/comment_edit_history_log

Following that link, we see an edit history, but not the contents of the edits themselves:

screenshot of edit history

However, this gives us the information we need! If we look at the HTML, we see that all edits prior to the current edit are defined as buttons with a link to that edit:

<button 
    type="button" 
    class="btn-link dropdown-item p-2" 
    role="menuitem" 
    data-edit-history-url="/user_content_edits/MDE1OlVzZXJDb250ZW50RWRpdElzc3VlRWRpdDo1MzIxODcxNzE="
>

The URL pointed to by the data-edit-history-url is the same URL loaded via the browser's networking tab when clicking to view a past edit in the web interface!

Unfortunately, if you attempt to view that page on it's own, you get a 404. It is intended to be viewed only from the web interface. But that's no problem, just go to the web interface, view one of the edits, and copy the headers it sends along. In my case I'm using Chromium, so I just find the request to the edit in my networking tab, right click and hit 'copy as Fetch request (nodejs)' and viola, with those headers I'm good to go!

For example, for the comment we've been using this whole time, I make that request and get back a bunch of HTML. The content of the original edit is near the end:

      <ins><p class="rich-diff-level-zero">before edit</p></ins>

There it is! I could write a script to automate this, but then I'd be doing everything for you :3 Suffice it to say that with a day's work of cleverly organized scraping, this is roughly what you must to in order to view these revisions. If someone does make such a tool, the OSINT community will surely be immensely grateful!

Upvotes: 4

Erfan Bahramali
Erfan Bahramali

Reputation: 410

To see the features of github api, it is better to read the following link

The best source to get the answer:

https://docs.github.com/en/rest/reference/issues

Check the issues you mentioned, ie issue comments, edit history issue, etc. in the link above

As far as I saw it is possible to receive issue comments but I did not see a section for edit history issue

I also suggest you see the following links for the edit history issue: https://github.com/isaacs/github/issues/954

Upvotes: 0

Related Questions