Toggl - All tasks since Monday

3 weeks ago

KevinBatdorf

Kept it simple. Find your API key on your profile settings. Text is white to hide my tasks from the screenshot.

Controller:

$key = env('TOGGL_KEY');
$workspace = env('TOGGL_WORKSPACE');
$curl = curl_init();

if (!$curl) {
	die("Couldn't initialize a cURL handle");
}

// Set the file URL to fetch through cURL
$monday = date('c', strtotime('last monday'));
$now = date('c', strtotime("now"));
$query = http_build_query(['start_date' => $monday, 'end_date' => $now]);
curl_setopt($curl, CURLOPT_URL, "https://www.toggl.com/api/v8/time_entries?{$query}");

// Set a password
curl_setopt($curl, CURLOPT_USERPWD, $key . ":api_token");

// Set a different user agent string (Googlebot)
curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)');

// Follow redirects, if any
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

// Fail the cURL request if response code = 400 (like 404 errors)
curl_setopt($curl, CURLOPT_FAILONERROR, true);

// Return the actual result of the curl result instead of success code
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

// Wait for 10 seconds to connect, set 0 to wait indefinitely
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);

// Execute the cURL request for a maximum of 50 seconds
curl_setopt($curl, CURLOPT_TIMEOUT, 50);

// Do not check the SSL certificates
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

// Fetch the URL and save the content
$response = curl_exec($curl);

// Check if any error has occurred
if (curl_errno($curl)) {
	echo 'cURL error: ' . curl_error($curl);
} else {
	
	$entries = [];
	foreach(json_decode($response) as $entry) {
		if ($entry->wid == $workspace && !in_array($entry->description, $entries))
			array_push($entries, $entry->description);
	}
}

// close cURL resource to free up system resources
curl_close($curl);


return view('__tinker__::tinker', [
    'entries' => $entries,
]);

View:

<html>
    <body>
      <div style="padding:2rem">
        **Weekly Task log**
  		<ul style="color:white;list-style:none;margin:0;padding:0">
        @foreach($entries as $entry)
			<li>> {{ $entry }}</li>
        @endforeach
          </ul>
      </div>
    </body>
</html>