Ich schleppe meine Nikon ja fast überall mit hin, aber greife dennoch zwischendurch auch gern zum Telefon, um einen Moment unmittelbar mit Familien und Freunden zu teilen. Allein auf Foursquare sind dabei inzwischen schon so einige Schnappschüsse zusammen gekommen. Durch die neueren App-Versionen, die die Fotos stärker in den Fokus rücken, wurde ich auf diesen kleinen Schatz aufmerksam und blätterte mit Freude durch die eingefrorenen Momente der letzten Monate. Dabei kam ich auf die Idee dieses Fototagebuch mit Schnappschüssen neben meiner eigentlichen Fotogalerie auch auf dieser Homepage zur Verfügung zu stellen. Ich nenne die Sammlung schlicht ‚Orte‘.

Hierfür habe ich in die Foursqaure-API geschaut und ein kleines Script gebastelt. Im ersten Schritt werden alle Checkins geladen und die, bei denen ich ein Foto gemacht habe mit allen für mich relevanten Informationen in einem Array gespeichert.

function getPhotos($limit=1)
{
	$foursquare_token = 'XXX';
	$count = 0;
	$jsonString = file_get_contents('https://api.foursquare.com/v2/users/self/checkins?oauth_token='.$foursquare_token.'&v=20120824&limit=1000');

	$obj = json_decode($jsonString);

	$checkins = $obj->{'response'}->{'checkins'}->{'items'};

	foreach ($checkins as $checkin)
	{		
		foreach ($checkin->{'photos'}->{'items'} as $picture)
		{
			$photos[] = array('date' => $checkin->{'createdAt'}, 
                  'name'   => $checkin->{'venue'}->{'name'},
				  'city'   => $checkin->{'venue'}->{'location'}->{'city'},
				  'country'   => $checkin->{'venue'}->{'location'}->{'country'},
				  'comment' => $checkin->{'shout'},
                  'imageURL'  => $picture->{'prefix'}."original".$picture->{'suffix'},
				  'thumbURL'  => $picture->{'prefix'}."200x200".$picture->{'suffix'});
			$count++;
			if ($count >= $limit)
				return $photos;
		}
	}
	return $photos;
}

Für den Zugriff wird der persönliche Account-Token benötigt, den man z.B. nach Anmeldung auf der API Explorer Seite auslesen kann.

Eine simple Demofunktion gibt die Fotos aus.

function getPhotosHTML($limit=1, $picturesPerRow=4)
{
	$photos = getPhotos($limit);
	$i=0;

	foreach ($photos as $photo)
	{
		echo ""; echo "";
		$i++;
		if ($i%$picturesPerRow == 0)
			echo "
";
	}
}

Um nicht bei jeder Seitenanfrage auf die API zu gehen, kann man sich bei Bedarf die Antwort auch noch in einem kleinen Cache zwischenspeichern.

function getPhotosCached($limit=1)
{
	$cache_file = "";
	$cache_life = 60*60*2; //caching time, in seconds

	$filemtime = @filemtime($cache_file);  // returns FALSE if file does not exist
	$photos = '';

	if (!$filemtime or (time() - $filemtime >= $cache_life)){
		$photos = getPhotos($limit);
		file_put_contents($cache_file, serialize($photos));
	}
	else
	{
		$photos = unserialize(file_get_contents($cache_file));
	}
	return $photos;
}