Following our previous tutorial: How To: Create Facebook Events Using Graph API
And to insure that we cover as much information as we can, we are going to show you today how to use the similar (previous) approach but without redirecting the user to Facebook (using cURL).
Our code
For this we have modified our previous code as follows:
<?php$app_id="APP_ID";$app_secret="APP_SECRET";$my_url="REDIRECT_URL";// mainly this should be the same URL to THIS page$code=$_REQUEST["code"];if(empty($code)) {$auth_url="http://www.facebook.com/dialog/oauth?client_id=".$app_id."&redirect_uri=". urlencode($my_url)."&scope=create_event";echo("<script>top.location.href='".$auth_url."'</script>");}$token_url="https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&redirect_uri=". urlencode($my_url)."&client_secret=".$app_secret."&code=".$code;$access_token=file_get_contents($token_url);if( !empty($_POST) && (empty($_POST['name']) ||empty($_POST['start_time']) ||empty($_POST['end_time'])) ) {$msg="Please check your inputs!";}elseif(!empty($_POST)) {$url="https://graph.facebook.com/me/events?".$access_token;$params=array();// Prepare Event fieldsforeach($_POSTas$key=>$value)if(strlen($value))$params[$key] =$value;// Check if we have an imageif( isset($_FILES) && !empty($_FILES['picture']['name']) ) {$uploaddir='./upload/';$uploadfile=$uploaddir.basename($_FILES['picture']['name']);if(move_uploaded_file($_FILES['picture']['tmp_name'],$uploadfile)) {$params['picture'] ="@".realpath($uploadfile);}}
// Start the Graph API call$ch= curl_init();curl_setopt($ch, CURLOPT_URL,$url);/*Next option is only used for
user from a local (WAMP)
machine. This should be removedwhen used on a live server!https://github.com/facebook/php-sdk/issues/7*///curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_POSTFIELDS,$params);$result= curl_exec($ch);$decoded= json_decode($result, true);curl_close($ch);if(is_array($decoded) && isset($decoded['id'])) {// Event created successfully, now we can// a) save event id to DB AND/OR// b) show success message AND/OR// c) optionally, delete image from our server (if any)$msg="Event created successfully: {$decoded['id']}";}}?><!doctype html><html><head><title>Create An Event</title><style>label {float: left; width: 100px;}input[type=text],textarea {width: 210px;}#msg {border: 1px solid #000; padding: 5px; color: red;}</style></head><body><?phpif( isset($msg) ) { ?><p id="msg"><?phpecho$msg; ?></p><?php } ?><form enctype="multipart/form-data"action=""method="post"><p><labelfor="name">Event Name</label><input type="text"name="name"value="a"/></p><p><labelfor="description">Event Description</label><textarea name="description"></textarea></p><p><labelfor="location">Location</label><input type="text"name="location"value=""/></p><p><labelfor="">Start Time</label><input type="text"name="start_time"value="<?php echo date('Y-m-d H:i:s'); ?>"/></p><p><labelfor="end_time">EndTime</label><input type="text"name="end_time"value="<?php echo date('Y-m-d H:i:s', mktime(0, 0, 0, date("m") , date("d")+1, date("Y"))); ?>"/></p><p><labelfor="picture">Event Picture</label><input type="file"name="picture"/></p><p><labelfor="privacy_type">Privacy</label><input type="radio"name="privacy_type"value="OPEN"checked='checked'/>Open <input type="radio"name="privacy_type"value="CLOSED"/>Closed <input type="radio"name="privacy_type"value="SECRET"/>Secret </p><p><input type="submit"value="Create Event"/></p></form></body></html>
Notes
- File upload snippet (lines 32-38) is for education purposes only, you should NOT use it on live websites!
- One can use the PHP-SDK instead of writing the cURL call ourselves, but this snippet is meant to people who don’t want to use the whole SDK for this simple task
- This code can be easily modified to accomplish other Graph API calls (e.g. posting to user wall, uploading a photo)
Comments
Post a Comment