- composer install ajt/guzzle-toggl
- Put your token into line 8
- Run getProjects(), put workspace and project ID in lines 9 and 10
- Run getTasks() or getCurrentTask()
Last active
August 14, 2020 08:54
-
-
Save xorik/b2e6580f6d83b6a1d583b84a14b957aa to your computer and use it in GitHub Desktop.
Toggl api PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Model; | |
use AJT\Toggl\TogglClient; | |
class Toggl | |
{ | |
const TOKEN = ''; // Put your toggl token here | |
const WORKSPACE = '1304347'; | |
const PROJECT = '15458745'; | |
protected $toggl_client; | |
public function __construct() | |
{ | |
$this->toggl_client = TogglClient::factory(array('api_key' => self::TOKEN)); | |
} | |
public function getProjects() | |
{ | |
$workspaces = []; | |
foreach ($this->api("workspaces") as $w) { | |
// Projects | |
$projects = []; | |
foreach ($this->api("workspaces/{$w["id"]}/projects") as $p) { | |
$projects[$p["id"]] = $p["name"]; | |
} | |
$workspaces[$w["id"]] = ["name" => $w["name"], "projects" => $projects]; | |
} | |
var_dump($workspaces); | |
} | |
public function getTasks(\DateTime $startDate, \DateTime $endDate) | |
{ | |
$page = 1; | |
$data = []; | |
while (1) { | |
$data = array_merge( | |
$data, | |
$this->getPage(self::WORKSPACE, self::PROJECT, $startDate, $endDate, $page, $perPage, $total) | |
); | |
if ($page * $perPage > $total) { | |
break; | |
} | |
$page++; | |
} | |
// Get current task | |
$now = new \DateTime(); | |
if ($startDate < $now && $endDate > $now) { | |
if ($x = $this->getCurrentTask()) { | |
$data = array_merge([$x], $data); | |
} | |
} | |
return $data; | |
} | |
public function getCurrentTask() | |
{ | |
if ($x = $this->api('time_entries/current')['data']) { | |
return [ | |
'id' => $x['id'], | |
'start' => $x['start'], | |
'end' => 'now', | |
'dur' => ((new \DateTime())->getTimestamp() - (new \DateTime($x['start']))->getTimestamp()) * 1000, | |
'description' => $x['description'], | |
'current' => true, | |
]; | |
} | |
return null; | |
} | |
protected function getPage( | |
$workspace, | |
$project, | |
\DateTime $startDate, | |
\DateTime $endDate, | |
$page, | |
&$perPage, | |
&$total | |
) { | |
$endDate = clone($endDate); | |
$start = $startDate->format('Y-m-d'); | |
$end = $endDate->modify('+1 day')->format('Y-m-d'); | |
$url = http_build_query( | |
[ | |
"user_agent" => "[email protected]", | |
"workspace_id" => $workspace, | |
"project_ids" => $project, | |
"since" => $start, | |
"until" => $end, | |
"page" => $page, | |
] | |
); | |
$data = $this->api("details?".$url, true); | |
$perPage = $data["per_page"]; | |
$total = $data["total_count"]; | |
return $data["data"]; | |
} | |
protected function api($url, $reports = false) | |
{ | |
$url = "https://toggl.com/".($reports ? "reports/api/v2/" : "api/v8/").$url; | |
$x = $this->toggl_client->get($url); | |
$x->send(); | |
usleep(100000); // Baby, don't hurt me | |
return $x->getResponse()->json(); | |
} | |
} |
@ JaneVanilla
Добрый день. Я в итоге не воспользовался их услугами, т.к. переехал в другую страну по другой визе. Я советую написать им напрямую, они раньше очень подробно на всё отвечали
Написала им на прямую, на официальном сайте нашла контакты
менеджера(Киевский офис).
Попросили документы, все отослала, менеджер ответила что все подходит и
чтоб им сделать приглашение нужно оплатить 100$ условно.
Прошу у них какой-то договор, где будет написано что за такие то услуги
плачу столько то тем-то. Она говорит что так нельзя, и никто у них такого
не просит.
Как думаете рискнуть?
Работаю front-end разработчиком на удаленке, с этим затянувшимся
карантином, хочется выехать и сменить обстановку.
пт, 14 авг. 2020 г. в 11:24, Andrey <[email protected]>:
… ***@***.**** commented on this gist.
------------------------------
@ JaneVanilla
Добрый день. Я в итоге не воспользовался их услугами, т.к. переехал в
другую страну по другой визе. Я советую написать им напрямую, они раньше
очень подробно на всё отвечали
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<https://gist.github.com/b2e6580f6d83b6a1d583b84a14b957aa#gistcomment-3417215>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AHAZHLJN3PN636Q4KGAA6ATSATYEPANCNFSM4P7IF4GQ>
.
@JaneVanilla
Я бы не стал ничего отправлять без договора. Если не хотят, то есть другие инкубаторы, они не сильно друг от друга отличаются
Спасибо
пт, 14 авг. 2020 г. в 11:54, Andrey <[email protected]>:
… ***@***.**** commented on this gist.
------------------------------
@JaneVanilla <https://github.com/JaneVanilla>
Я бы не стал ничего отправлять без договора. Если не хотят, то есть другие
инкубаторы, они не сильно друг от друга отличаются
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<https://gist.github.com/b2e6580f6d83b6a1d583b84a14b957aa#gistcomment-3417247>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AHAZHLMKHIGS76TLSUPABVLSAT3TBANCNFSM4P7IF4GQ>
.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Добрый день!
Подскажите, у вас есть опыт сотрудничества с Twoj StartUp?
Если да, у меня вопрос, хочу с ними работать, но смущает такой момент что просят сразу плату за сотрудничество и не хотят никакой двухсторонний договор подписать. Так всегда происходит?