Skip to content

GameDevLou/Directory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Directory

Reads data from a google doc (public url) and formats it into a member directory.

###How it works: The Magic:

"http://spreadsheets.google.com/feeds/list/" . $docId . "/od6/public/values?alt=json&callback=displayContent"

The URL above will ask google docs for a JSON feed of any public spreadsheet. The returned JSON has a few interesting quirks which I have worked out in my 'googleSheetData' & 'createModel' functions.

The JSON returned will have the content of your spreadsheet's rows will look like this:

"entry": [
            {
                "id": {
                    "$t": "https://spreadsheets.google.com/feeds/list/1yAFycceiw7hi3uIGfPof49V7jGJ0MzTlh0C-2YtS80Q/od6/public/values/cokwr"
                },
                "updated": {
                    "$t": "2015-02-11T16:42:24.572Z"
                },
                "category": [
                    {
                        "scheme": "http://schemas.google.com/spreadsheets/2006",
                        "term": "http://schemas.google.com/spreadsheets/2006#list"
                    }
                ],
                "title": {
                    "type": "text",
                    "$t": "Global Game Jam 2014"
                },
                "content": {
                    "type": "text",
                    "$t": "hashtag: #GGJ14, month: Janurary, year: 2014, theme: We don't see things as they are, we see them as we are., image: http://gamedevlou.org/wp-content/uploads/2015/02/badge-ggj14.png, location: LVL1"
                },
                "link": [
                    {
                        "rel": "self",
                        "type": "application/atom+xml",
                        "href": "https://spreadsheets.google.com/feeds/list/1yAFycceiw7hi3uIGfPof49V7jGJ0MzTlh0C-2YtS80Q/od6/public/values/cokwr"
                    }
                ],
                "gsx$name": {
                    "$t": "Global Game Jam 2014"
                },
                "gsx$hashtag": {
                    "$t": "#GGJ14"
                },
                "gsx$month": {
                    "$t": "Janurary"
                },
                "gsx$year": {
                    "$t": "2014"
                },
                "gsx$theme": {
                    "$t": "We don't see things as they are, we see them as we are."
                },
                "gsx$image": {
                    "$t": "http://gamedevlou.org/wp-content/uploads/2015/02/badge-ggj14.png"
                },
                "gsx$location": {
                    "$t": "LVL1"
                }
            },

Really all I wanted was to access the data in each row using the column name (first row) so in the JSON example above my columns are "gsx$name", "gsx$hashtag", "gsx$month", ,"gsx$year", "gsx$theme", "gsx$image", and "gsx$location"

All of the relevant data is nested inside "feed" then inside "entry" so I built a function that gets the json from the URL and returns a PHP object of just the "entry" data nested inside.

Here are the googleSheetData and CreateModel functions:

function googleSheetData( $docId ) {
	$url = "http://spreadsheets.google.com/feeds/list/" . $docId . "/od6/public/values?alt=json&callback=displayContent";
	try {
		$json = file_get_contents( $url );
	} catch ( Exception $e ) {
		echo " I AM ERROR <br>";
		echo $e;
		return;
	}
	$data = json_decode( $json, TRUE );
	return $data['feed']['entry'];
}

function createModel( $table ) {
	$model = array();
	foreach ( $table as $row ) {
		$newItem = new stdClass;
		foreach ( $row as $key => $value ) {
			if ( strpos( $key, 'gsx$' ) !== FALSE ) {
				$fieldName = str_replace( 'gsx$', '', $key );
				$content = htmlspecialchars( str_replace( "'", "", $value['$t'] ) );
				$newItem->$fieldName = $content;
			}
		}
		array_push( $model, $newItem );
	}
	return $model;
}

Then I use the "createModel" function to reformat the data into eisier to use structure like this:

Array
(
    [0] => stdClass Object
        (
            [name] => Global Game Jam 2014
            [hashtag] => #GGJ14
            [month] => Janurary
            [year] => 2014
            [theme] => We dont see things as they are, we see them as we are.
            [image] => http://gamedevlou.org/wp-content/uploads/2015/02/badge-ggj14.png
            [location] => LVL1
        )

    ...

)

Check out the functions in Directory.php they should be easy to translate into other languages!

###Deployment to wordpress: Make sure the 'Insert PHP' plugin is installed in wordpress From your terminal run build script in the project directory:

sh build.sh

this will replace the "" tags with "[insert_php]" and "[/insert_php]" tags required by Insert PHP plugin ritten in Markdown! To get a feel for Markdown's syntax, type some text into the left window and watch the results in the right.

From here you can copy the contents of directory-wp.php and paste it into a regular wordpress page, the Insert PHP plugin will run the code on the server before the page loads.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published