在POST Request Angular之后从php文件更新json文件

时间:2016-06-01 12:19:22

标签: php angularjs json

我正在使用Twitter 1.1 API并显示推文的Feed。 Angular向php文件GET发出get_tweets.php请求,然后写入包含所有数据的json文件,然后使用angular来获取数据。

json文件的原因是缓存来自twitter的结果,以确保不超过api限制。因此我每隔10分钟调用一次twitter API,然后更新json文件。

如果用户点击前端的删除,我正在尝试删除特定的推文。我认为应该发生的是对php文件发出POST请求,然后从json文件中删除该特定的推文。

控制器中使用的工厂方法

....updateTwitter: function() {
            return $http({
                url: 'get_tweets.php',
                method: 'GET'
            })
        },
        fetchTwitter: function() {
            return $http({
                url: 'twitter_result.json',
                method: 'GET'
            })
        }.....

控制器获得要求获取TWEETS&请求删除TWEET

socialMedia.updateTwitter()
    .then(function(){
        socialMedia.fetchTwitter()
        .then(function(response){
            twitterCtrl.loading = false;
            var result = JSON.parse(response.data.twitter_result);
            for(var i = 0; i < result.length; i++){
                result[i].created_at = new Date(result[i].created_at);
                twitterCtrl.twitterPosts.push(result[i]);
            }      
        })
        .catch(function(error){
            twitterCtrl.loading = false;
            twitterCtrl.error = true;
        });
    });

this.removeTweet = function(index) {
        var data = JSON.stringify({data: this.twitterPosts.splice(index, 1)});
        $http.post("get_tweets.php", data).success(function(data, status) {
            console.log(data)
        })
    }      

上面的代码正确记录data,例如。 data:[{created_at: "2016-05-30T12:28:00.000Z", id: 737259264381726700, id_str: "737259264381726720",…}]

我的问题是如何通过php文件从json文件中删除此推文。即使它被删除了10分钟,直到下一个GET请求从php文件发送到Twitter即可。

PHP文件

<?php
require_once('twitter_proxy.php');
// Twitter OAuth Config options
$oauth_access_token = '*****';
$oauth_access_token_secret = '*****';
$consumer_key = '*****';
$consumer_secret = '*****';
$user_id = '*****';
$screen_name = 'StackOverflow';
$count = 5;
$twitter_url = 'statuses/user_timeline.json';
$twitter_url .= '?user_id=' . $user_id;
$twitter_url .= '&screen_name=' . $screen_name;
$twitter_url .= '&count=' . $count;
// Create a Twitter Proxy object from our twitter_proxy.php class
$twitter_proxy = new TwitterProxy(
    $oauth_access_token,            // 'Access token' on https://apps.twitter.com
    $oauth_access_token_secret,     // 'Access token secret' on https://apps.twitter.com
    $consumer_key,                  // 'API key' on https://apps.twitter.com
    $consumer_secret,               // 'API secret' on https://apps.twitter.com
    $user_id,                       // User id (http://gettwitterid.com/)
    $screen_name,                   // Twitter handle
    $count                          // The number of tweets to pull out
);

function checkForUpdates($twitter_proxy, $twitter_url) {
    $tweets = $twitter_proxy->get($twitter_url);
    $data = array ('twitter_result' => $tweets, 'timestamp' => time());
    file_put_contents('twitter_result.json', json_encode($data));
}

//check if the file exists
if(!file_exists('twitter_result.json')) {
    //Invoke the get method to retrieve results via a cURL request
    //and create a file with timestamp containing tweets
    checkForUpdates($twitter_proxy, $twitter_url);

}else {
    //if file exists check it has not been updated in 10 minutes
    //if not update the tweets and timestamp
    $data = json_decode(file_get_contents('twitter_result.json'));
    if ($data->{"timestamp"} > (time() - 10 * 60)) {
        checkForUpdates($twitter_proxy, $twitter_url);
    }
}

0 个答案:

没有答案