Я решил проанализировать HTML-страницу моего профиля с помощью PHP. Я начинаю загрузку HTML для моей страницы профиля:
$githubProfile = file_get_contents('https://github.com/controversial');
рядом я нахожу положение фразы contributions in the last year
на этой странице. Пробелы странны между contributions
и in the last year
, поэтому я использую регулярное выражение для соответствия любому пространству.
$contributionsIndex = preg_match(
'/contributions\s+in the last year/',
$githubProfile,
$matches,
PREG_OFFSET_CAPTURE
);
$index = $matches[0][1];
Наконец, я итерацию назад с этого момента, пока я не наткнулся на символ, который не является ни числом или запятой в числе. Как только это условие становится ложным, я знаю, что я нашел начало номера:
$endIndex = $index;
while (is_numeric($githubProfile[$index-2]) || $githubProfile[$index-2] == ',')
$index--;
$contributionsCount = substr($githubProfile, $index-1, $endIndex-$index);
Наконец, я эхо числа из (без запятых)
echo(str_replace(',', '', $contributionsCount));
Наконец, я использую вызов AJAX с моей страницы JavaScript, чтобы получить значение из скрипта PHP.
function get(url, callback) {
/* eslint-disable no-console */
const xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onload = e => (callback || console.log)(e.target.responseText);
xhr.onerror =() => console.log('error');
xhr.send();
/* eslint-enable no-console */
}
// Fill in GitHub contributions count
get('contributions-count.php', (resp) => {
document.getElementById('gh-contributions-count').innerText = resp;
});
Я уверен, что это будет выполнимо более чисто в будущем с GraphQL API GitHub, но это все еще в стадии предварительного просмотра.
К сожалению, первый страница возвращается всего около 9 дней, а для анализа все, начиная с последней страницы, будет намного превышать лимиты скорости GitHub API. –
Вы правы, это даст вам фиксации за последние 90 дней, я не видел ограничений в документации. Вы пытались получить свои репозитории (пользователи/имя пользователя/репозитории) и после этого проверить коммиты над ними (repos/username/repoName/commits)? – Alan
Я мог бы попробовать это. Спасибо @Alan. –