如何解析服务器上的dropbox rss feed

问题描述:

我正在开发一个使用Dropbox SDK的ios应用程序。我想在Dropbox中的任何文件被编辑时通知用户。我不知道如果Dropbox提供任何API,但我认为苹果的推送通知会很好。根据我的研究,在Dropbox SDK中存在类似/ delta的内容,但没有足够的资源或示例编码出Internet来理解/ delta。如何解析服务器上的dropbox rss feed

我要的是:

Dropbox的文件变化---->我的服务器检测到什么改变,发送到苹果----->苹果推送通知服务发送通知------ - > IOS设备接收通知

所以目前我完成了推送通知部分我的应用程序,我可以通过本地apache服务器和php脚本发送一个简单的通知给我的应用程序。设备收到通知。

我的问题是如何实现

这部分Dropbox的文件变化---->我的服务器检测到什么改变,发送到苹果----->

我不知道如何解析我的保管箱文件夹的rss feed。我应该用什么语言解析Dropbox上的数据? 我应该不断轮询并检查是否有任何文件被编辑? 或者有没有一种方式,Dropbox发送通知直接到我的服务器或苹果通知服务器,所以我不需要一直在轮询更改?

由于提前

你会想什么是创建一个PHP脚本,它将分析您的RSS提要,并发送推送通知到您的应用程序。并使用允许cron命令的服务器,以便可以连续运行此脚本并检查更新。

<?php 

//set the time zone 
date_default_timezone_set('America/New_York'); 

//get xml file from dropbox event page 
$completeurl ='your xml url'; 

//equal badge to zero 
$badge=0; 

//format date and time 
$format = 'D, d M Y H:i:s O'; 

// Put your alert message here: 
$message; 


//parse the xml file 
$item = $xml->channel->item; 
for ($i = 0; $i < sizeof($item); $i++) { 

    $title = $item[$i]->title; 
    $description=$item[$i]->description; 
    $pubDate = $item[$i]->pubDate; 


    //search title for word 'edited' 
    if (strpos($title,'edited') !== false) { 
     echo "Edited word is found in title true \n"; 


     $inDate = DateTime::createFromFormat($format, $pubDate);//input date and time 
     $postDate = new DateTime();// current date and time 

     $diff = $inDate->diff($postDate); // difference current-input 

     // If the total number of days is > 0, or the number of hours > 0, or the number of minutes > 30, then its an invalid timestamp. 
     if($diff->format('%a') > 0 || $diff->format('%H') > 0 || $diff->format('%i') > 30) { 
      echo "update is not recent\n"; 
    }else{ 
     //if true increase badge by one 

     $badge = $badge + 1; 
    } 
} 



} 
//print total updates 
echo "Total Badge= " . $badge. "\n"; 


//if total updates is bigger or equal to one send notification 
if($badge>=1){ 
// Put your device token here (without spaces): 
$deviceToken = 'yourdevicetoken'; 

// Put your private key's passphrase here: 
$passphrase = 'yourpassphrase in your.cem file'; 


//////////////////////////////////////////////////////////////////////////////// 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err, 
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
    exit("Failed to connect: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 

// Create the payload body 
$body['aps'] = array(
    'alert' => $message, 
    'sound' => 'default', 
    'badge' => $badge 
    ); 

// Encode the payload as JSON 
$payload = json_encode($body); 

// Build the binary notification 
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 

// Send it to the server 
$result = fwrite($fp, $msg, strlen($msg)); 

if (!$result) 
    echo 'Message not delivered' . PHP_EOL; 
else 
    echo 'Message successfully delivered' . PHP_EOL; 

// Close the connection to the server 
fclose($fp); 
}else 
    echo "There is no update available \n"; 


?>