最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to get latest commit date - Github API - Stack Overflow

programmeradmin4浏览0评论

I'm currently writing a small database of git reps and im wondering how i would go ahead and get the date of the latest commit if i have the rep listed in my database.

I've never worked with the github API and im having a bit of a hard time wrapping my head around it.

If anyone could help me figure it out i'd much appreciate it. PHP or JS prefereably as all the examples ive found has been in ruby.

I'm currently writing a small database of git reps and im wondering how i would go ahead and get the date of the latest commit if i have the rep listed in my database.

I've never worked with the github API and im having a bit of a hard time wrapping my head around it.

If anyone could help me figure it out i'd much appreciate it. PHP or JS prefereably as all the examples ive found has been in ruby.

Share Improve this question asked Apr 24, 2015 at 10:40 Martin HobertMartin Hobert 2031 gold badge3 silver badges10 bronze badges 5
  • This is the api you'll be using. Can you show what you have tried, and explain what didn't work? developer.github.com/v3/repos/commits – Travis Collins Commented Apr 24, 2015 at 10:46
  • Github has what it's called, a "RESTful API", for the kind of which many tutorials exist online - If you don't know how to poll such services it's best if you take a tutorial that teaches the fundamentals of making such requests – nicholaswmin Commented Apr 24, 2015 at 10:51
  • This is what ive tried: $url = 'api.github.com/repos/epenance/hoberthovers'; $obj = json_decode(file_get_contents($url), true); What im getting back is: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden – Martin Hobert Commented Apr 24, 2015 at 11:02
  • 1 You will need to execute: curl -X GET -H "Cache-Control: no-cache" https://api.github.com/repos/<username>/<repo>/commits – ʰᵈˑ Commented Apr 24, 2015 at 11:17
  • Aight, it works on my live server but not my localhost with what i wrote above, however some of the links in my db dives into their folders which is the ones i want to see the update on such as this: github.com/ikkeflikkeri/LeagueSharp/tree/master/EasyAhri So my previous line doesnt work. Any ideas? – Martin Hobert Commented Apr 24, 2015 at 11:21
Add a comment  | 

3 Answers 3

Reset to default 10

Old question but I wanted to point out (at least with api v3) you could use the branches api to get the latest commit date for a particular branch. I assume in your case you're interested in master.

Which would look like:

https://api.github.com/repos/:owner/:repo/branches/master

See https://developer.github.com/v3/repos/branches/

If you were to use PHP like your example, I'd use cURL instead of file_get_contents, as you'd need to configure allow-url-fopen.

GitHub also requires you to send a user-agent in the header: https://developer.github.com/v3/#user-agent-required

For example, your PHP code would look like;

$objCurl = curl_init();

//The repo we want to get
curl_setopt($objCurl, CURLOPT_URL, "https://api.github.com/repos/google/blueprint/commits");

//To comply with https://developer.github.com/v3/#user-agent-required
curl_setopt($objCurl, CURLOPT_USERAGENT, "StackOverflow-29845346"); 

//Skip verification (kinda insecure)
curl_setopt($objCurl, CURLOPT_SSL_VERIFYPEER, false);

//Get the response
$response = curl_exec($objCurl);
print_r( json_decode($response, true) );

Note: You will be able to continue using file_get_contents and send the user-agent header. See this answer

I wanted to answer this exact question so I made a very small demo of how to get the date of the latest commit.

Demo

Output:

ta-dachi
master
2019-03-21T14:50:22Z <----- What you want
b80126c3ea900cd7c92729e652b2e8214ff014d8
https://github.com/ta-dachi/eatsleepcode.tech/tree/master

Github repo

index.html

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>React Local</title>
  <script
    type="application/javascript"
    src="https://unpkg.com/[email protected]/umd/react.production.min.js"
  ></script>
  <script
    type="application/javascript"
    src="https://unpkg.com/[email protected]/umd/react-dom.production.min.js"
  ></script>
  <script
    type="application/javascript"
    src="https://unpkg.com/@babel/standalone/babel.min.js"
  ></script>
  <script
    type="application/javascript"
    src="https://unpkg.com/[email protected]/dist/fetch.umd.js"
  ></script>
</head>
<body>
  <div id="root"></div>
  <script type="text/jsx" src="index.jsx"></script>
</body>

index.jsx

/**
 * See https://developer.github.com/v3/repos/branches/#get-branch
 *
 * Example Github api request:
 * https://api.github.com/repos/ta-dachi/eatsleepcode.tech/branches/master
 */
class LatestCommitComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      author: "",
      branch: "",
      date: "",
      sha: "",
      link: ""
    };
  }

  componentDidMount() {
    // Replace this with your own repo
    // https://api.github.com/repos/:owner/:repo/branches/master
    fetch(
      "https://api.github.com/repos/ta-dachi/eatsleepcode.tech/branches/master"
    )
      .then(response => {
        response.json().then(json => {
          console.log(json);
          this.setState({
            author: json.commit.author.login,
            branch: json.name,
            date: json.commit.commit.author.date,
            sha: json.commit.sha,
            link: json._links.html
          });
        });
      })
      .catch(error => {
        console.log(error);
      });
  }

  render() {
    return (
      <div>
        <div>{this.state.author}</div>
        <div>{this.state.branch}</div>
        <div>{this.state.date}</div>
        <div>{this.state.sha}</div>
        <div>{this.state.link}</div>
      </div>
    );
  }
}

ReactDOM.render(<LatestCommitComponent />, document.getElementById("root"));
发布评论

评论列表(0)

  1. 暂无评论