url=$url; $this->user=$user; $this->pass=$pass; } public function forIssues($user,$repo,$callback,$args){ $page=1; while(1){ $issues=$this->request("repos/$user/$repo/issues?page=$page&".http_build_query($args)); if(!$issues) break; foreach($issues as $issue){ call_user_func($callback,$issue); } $page++; } } public function editIssue($issue,$args){ $this->request($issue->url,$args,true); } public function request($url, $postFields = null, $patch=false){ if(substr($url,0,4)!='http'){ $url=$this->url.$url; } echo ">> $url\n"; $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, 'Bot'); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); if($patch){ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH'); } if (!is_null($postFields)) { $postFields = json_encode($postFields); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Content-Length: '.strlen($postFields), ]); } if($this->user) { curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, $this->user.':'.$this->pass); } $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result = curl_exec($ch); curl_close($ch); return json_decode($result); } }