问题描述
我正在尝试使用github api获取对存储库 class Worker : public QObject
{
Q_OBJECT
public slots:
void doWork(const QString ¶meter) {
QString result;
forever{
if(QThread::currentThread()->isInterruptionRequested()){
printf("true");
return;
}else{
if(!QThread::currentThread()->isInterruptionRequested()){
cout<<parameter.toStdString();
}
}
}
emit resultReady(result);
}
signals:
void resultReady(const QString &result);
};
的{{1}}分支的所有提交,但是无论我如何传递查询参数,我始终会获得首页。不确定我发送的请求中有什么问题。
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller(QObject *parent = nullptr):QObject(parent) {
Worker *worker = new Worker;
worker->movetoThread(&workerThread);
connect(&workerThread,&QThread::finished,worker,&QObject::deleteLater);
connect(this,&Controller::operate,&Worker::doWork);
workerThread.start();
}
~Controller() {
workerThread.quit();
workerThread.wait();
}
public slots:
void stop(){
workerThread.requestInterruption();
}
signals:
void operate(const QString &);
};
我总是得到第一页。我尝试使用给定here
的查询参数解决方法
您似乎访问了错误的端点。发送给您的是this one,在这里您仅收到一次提交(对于您而言,是最新的develop
提交)。
您需要为您的应用实现一些分页逻辑并访问以下端点:/repos/{owner}/{repo}/commits
。
例如,要获取开发分支的提交,您可以发送这样的请求:
curl -H "Authorization: XYZ" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ACCNAME/REPO/commits\?sha\=develop
(如果您使用的是octokit,那会更漂亮,但这只是一个示例:))
现在,为了让您分页,您还需要查询per_page
和page
参数,并检查是否已达到限制。
基本上,使用以下查询:
curl -H "Authorization: XYZ" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ACCNAME/REPO/commits\?sha\=develop\&per_page\=X\&page\=Y
其中X
和Y
是传递给curl
请求的参数。收到响应后,您将检查数组的长度(因为您将获得提交的数组)是否等于X
。如果是这样,请再次提出请求,但是这次增加Y+1
,这样您将获得下一页。循环执行此过程,直到得到的响应比所需的X
少,因为这样您将知道您将从回购中获得最后的提交。
节点中的示例(免责声明,未正确编写代码)
let allCommits = [];
let call = function(n,y) {
return new Promise((resolve,reject) => {
getCommits(function(statusCode,result) {
allCommits.push(result);
if (result.length === y) {
call(n + 1,y);
}
},n,y);
});
};
如果getCommits
是从分支获取一系列提交的函数,并且将path
定义为path: '/repos/ACC_NAME/REPO/commits?sha=develop&page=' + n + '&per_page=' + y
,那么最后您将拥有所有提交页面allCommits
数组。最后,您只需要把它弄平,但是精通js技能的人可以提供一种更优雅的方法来实现此目的。