Пример #1
0
 static function sync($id = false)
 {
     if ($id) {
         $q = sqlquery("SELECT * FROM btx_social_feed_queries WHERE id = '" . sqlescape($id) . "' ORDER BY service");
     } else {
         $q = sqlquery("SELECT * FROM btx_social_feed_queries ORDER BY service");
     }
     while ($f = sqlfetch($q)) {
         // Twitter
         if ($f["service"] == "Twitter") {
             $twitter = isset($twitter) ? $twitter : new BigTreeTwitterAPI();
             $params = array();
             if (self::$IgnoreRetweets) {
                 $params["include_rts"] = false;
             }
             if (self::$IgnoreReplies) {
                 $params["exclude_replies"] = true;
             }
             if ($f["type"] == "Person") {
                 self::syncData($f, "Twitter", $twitter->getUserTimeline($f["query"], self::$SyncCount, $params));
             } elseif ($f["type"] == "Hashtag") {
                 self::syncData($f, "Twitter", $twitter->searchTweets("#" . ltrim(trim($f["query"]), "#"), self::$SyncCount, "recent", false, false, false, $params));
             } elseif ($f["type"] == "Search") {
                 self::syncData($f, "Twitter", $twitter->searchTweets(trim($f["query"]), self::$SyncCount, "recent", false, false, false, $params));
             }
             // Instagram
         } elseif ($f["service"] == "Instagram") {
             $instagram = isset($instagram) ? $instagram : new BigTreeInstagramAPI();
             if ($f["type"] == "Person") {
                 self::syncData($f, "Instagram", $instagram->getUserMedia($f["query"], self::$SyncCount));
             } elseif ($f["type"] == "Hashtag") {
                 self::syncData($f, "Instagram", $instagram->getTaggedMedia(trim($f["query"])));
             } elseif ($f["type"] == "Location") {
                 $query = json_decode($f["query"], true);
                 // Instagram uses meters, so we convert the default miles to meters
                 $radius = is_numeric($query["radius"]) ? $query["radius"] : floor(self::$DefaultLocationRadius * 1609.34);
                 self::syncData($f, "Instagram", $instagram->searchMedia($query["latitude"], $query["longitude"], $radius));
             }
             // Google+
         } elseif ($f["service"] == "Google+") {
             $gplus = isset($gplus) ? $gplus : new BigTreeGooglePlusAPI();
             if ($f["type"] == "Person") {
                 self::syncData($f, "Google+", $gplus->getActivities($f["query"], self::$SyncCount));
             } elseif ($f["type"] == "Search") {
                 self::syncData($f, "Google+", $gplus->searchActivities($f["query"], self::$SyncCount, "recent"));
             }
             // YouTube
         } elseif ($f["service"] == "YouTube") {
             $youtube = isset($youtube) ? $youtube : new BigTreeYouTubeAPI();
             if ($f["type"] == "Person") {
                 self::syncData($f, "YouTube", $youtube->getChannelVideos($f["query"], self::$SyncCount));
             } elseif ($f["type"] == "Search") {
                 self::syncData($f, "YouTube", $youtube->searchVideos($f["query"], self::$SyncCount, "date"));
             }
             // Flickr
         } elseif ($f["service"] == "Flickr") {
             $flickr = isset($flickr) ? $flickr : new BigTreeFlickrAPI();
             if ($f["type"] == "Person") {
                 self::syncData($f, "Flickr", $flickr->getPhotosForPerson($f["query"], self::$SyncCount));
             } elseif ($f["type"] == "Search") {
                 self::syncData($f, "Flickr", $flickr->searchPhotos($f["query"], self::$SyncCount));
             } elseif ($f["type"] == "Location") {
                 $query = json_decode($f["query"], true);
                 $radius = is_numeric($query["radius"]) ? $query["radius"] : self::$DefaultLocationRadius;
                 self::syncData($f, "Flickr", $flickr->getPhotosByLocation($query["latitude"], $query["longitude"], $radius, "mi", self::$SyncCount));
             }
         } elseif ($f["service"] == "Facebook") {
             $facebook = isset($facebook) ? $facebook : new BigTreeFacebookAPI();
             if ($f["type"] == "Page") {
                 // Look up info on the page first to get username
                 $user_response = $facebook->callUncached($f["query"] . "?fields=username,link");
                 // Get posts
                 $response = $facebook->callUncached($f["query"] . "/posts?fields=id,message,type,picture,link,actions,created_time,updated_time&limit=" . self::$SyncCount);
                 // We're going to emulate the response from the more mature APIs
                 $data = new stdClass();
                 $data->Results = array();
                 foreach ($response->data as $item) {
                     $result = new stdClass();
                     $result->ID = $item->id;
                     $result->Link = $item->link;
                     $result->Message = $item->message;
                     $result->PageLink = $user_response->link;
                     $result->PageUsername = $user_response->username;
                     $result->Picture = $item->picture;
                     $result->Type = $item->type;
                     $result->URL = $item->actions[0]->link;
                     $result->CreatedAt = date("Y-m-d H:i:s", strtotime($item->created_time));
                     $result->UpdatedAt = date("Y-m-d H:i:s", strtotime($item->updated_time));
                     $data->Results[] = $result;
                 }
                 self::syncData($f, "Facebook", $data);
             }
         }
     }
     // Get view information for manually caching the records
     $view = BigTreeAutoModule::getViewForTable("btx_social_feed_stream");
     $parsers = array();
     foreach ($view["fields"] as $key => $field) {
         if ($field["parser"]) {
             $parsers[$key] = $field["parser"];
         }
     }
     foreach (self::$ItemsToCache as $i) {
         BigTreeAutoModule::cacheRecord($i, $view, $parsers, array(), $i);
     }
 }