public static function processFeeds() { # This function retrieves all feeds which are due to be refreshed. # Any feed where the next update date is before now, will be included. # The time interval is determined by the FEED_UPDATE_INTERVAL environment variable # A scheduled task automatically gets articles for each feed and stored them in the database. # Set the timeout limit to 10 minutes set_time_limit(600); # Get Feeds which are due to be refreshed $current_time = time(); $dt = new \DateTime("@{$current_time}"); # Only get feeds where the next update date is before now. $feeds = \p4\Feed::where('next_update', '<', $dt->format("Y-m-d H:i:s"))->get(); foreach ($feeds as $feed) { # Do not let a bad feed interrupt the processing of other feeds try { \p4\Libraries\RSSParser::getFeed($feed); echo "Processed Feed #" . $feed->id . "<br>"; } catch (\Exception $e) { echo "Error in processing Feed #" . $feed->id . "<br>"; } } # Update the Stats for Feeds $sql = "UPDATE\n feeds INNER JOIN\n ( \n SELECT\n f.id,\n COUNT(*) cnt\n FROM\n articles a INNER JOIN feeds f ON a.feed_id = f.id\n WHERE\n a.created_at > subdate(current_date, 1)\n GROUP BY\n f.id\n ) v ON v.id = feeds.id\n SET\n stats = v.cnt "; \DB::update(\DB::raw($sql)); # Update the Stats for Tags $sql = "UPDATE\n tags INNER JOIN\n ( \n SELECT \n t.id, \n COUNT(*) cnt\n FROM \n articles a INNER JOIN feeds f ON f.id = a.feed_id INNER JOIN feed_user u ON u.feed_id = f.id\n INNER JOIN tags t ON CONCAT(a.title,a.article_text) LIKE CONCAT('%',t.tag,'%')\n WHERE\n u.user_id = 1 \n GROUP BY\n t.id\n ) v ON v.id = tags.id\n SET\n stats = v.cnt "; \DB::update(\DB::raw($sql)); # Update the Stats for Categories $sql = "UPDATE\n categories INNER JOIN\n ( \n SELECT\n u.category_id,\n COUNT(*) cnt\n FROM\n articles a INNER JOIN feeds f ON a.feed_id = f.id\n INNER JOIN feed_user u ON u.feed_id = f.id \n WHERE\n a.created_at > subdate(current_date, 1)\n GROUP BY\n u.category_id\n ) v ON v.category_id = categories.id\n SET\n stats = v.cnt "; \DB::update(\DB::raw($sql)); # Update User Stats $sql = "UPDATE users\n INNER JOIN\n (\n SELECT\n u.user_id,\n COUNT(*) new_articles\n FROM\n articles a INNER JOIN feed_user u ON a.feed_id = u.feed_id\n WHERE\n a.created_at > subdate(current_date, 1)\n GROUP BY\n u.user_id \n ) v ON users.id = v.user_id\n SET\n users.new_articles = v.new_articles"; \DB::update(\DB::raw($sql)); # Update tua table \p4\Libraries\RSSParser::updateTagArticlesUsers(); }
public function get_stats() { $feed = \p4\Feed::where('id', $this->feed_id)->first(); #dd($feed->stats); return $feed->stats; }
public function postAddFeed(Request $request) { $user_id = \Auth::user()->id; #Validate User Input $input = array('feed-url' => $request->input('feed-url'), 'feed-name' => $request->input('feed-name'), 'feed_category' => $request->input('add-feed-category'), 'new-feed-weight' => $request->input('new-feed-weight')); $validator = Validator::make($input, ['feed-url' => 'required|url', 'feed-name' => 'required|min:3|max:50', 'feed_category' => 'required|integer|min:0', 'new-feed-weight' => 'required|integer|min:1|max:100']); #dd($request->input('add-feed-category')); if ($validator->fails()) { return redirect('/Manage')->withErrors($validator)->withInput(); } $feed_url = $request->input('feed-url'); $feed_name = $request->input('feed-name'); $feed_weight = $request->input('new-feed-weight'); $categoryID = $request->input('add-feed-category'); #Add Feed to the Feeds table (if it does not already exist) if (!\p4\Feed::where('feed_url', '=', $feed_url)->exists()) { $feed = new \p4\Feed(); $feed->feed_url = $feed_url; $feed->next_update = new \DateTime(); $feed->last_updated = new \DateTime(); $feed->status = 'A'; $feed->save(); # Try to auto-load articles for the first time if it is a new feed. # If the URL is not a valid RSS feed, do not allow the user to add it, send back an error message instead. try { \p4\Libraries\RSSParser::getFeed($feed); } catch (\Exception $e) { # If the feed is not valid, remove it and tell the user $feed->delete(); \Session::flash('message', '"The URL does not appear to point to a valid RSS feed. Please verify and try again."'); return \Redirect::to('/Manage'); } } else { $feed = \p4\Feed::where('feed_url', '=', $feed_url)->first(); } #Add Feed to the Users_Feeds table $user_feed = new \p4\UserFeed(); $user_feed->user_id = $user_id; $user_feed->feed_id = $feed->id; $user_feed->feed_name = $feed_name; $user_feed->category_id = $categoryID; $user_feed->weight = $feed_weight; $user_feed->save(); # Update the Session Feeds so the updated list will appear in the left nav \p4\User::setSessionFeeds($user_id); return \Redirect::to('/Manage'); }