middleware('auth'); } public function index(Request $request) { return view('import', []); } public function preview(Request $request) { $url = $request->input('url'); if(preg_match('/twitter\.com\/.+\/status(?:es)?\/(\d+)/', $url, $match)) { $tweetID = $match[1]; } else { return response()->json(['error'=>'Invalid URL']); } try { $data = Twitter::getTweet($tweetID); } catch(\Exception $e) { return response()->json(['error'=>'Could not fetch tweet']); } $player = Player::where('twitter_user_id', $data->user->id_str)->first(); if(!$player) { return response()->json(['error'=>'Couldn\'t find the player for this tweet. Check that they are added to a team.']); } $tweet = self::buildTweetFromTwitterObject($player, $data); $event = new NewTweetEvent($tweet); unset($event->socket); return response()->json($event); } public function save(Request $request) { $tweetID = $request->input('tweet_id'); try { $data = Twitter::getTweet($tweetID); } catch(\Exception $e) { return response()->json(['error'=>'Could not fetch tweet']); } $player = Player::where('twitter_user_id', $data->user->id_str)->first(); if(!$player) { return response()->json(['error'=>'Couldn\'t find the player for this tweet. Check that they are added to a team.']); } $tweet = self::buildTweetFromTwitterObject($player, $data); $tweet->save(); if($tweet->mission_id && $tweet->team_id) { event(new NewTweetEvent($tweet)); } return response()->json(['result'=>'ok']); } private static function buildTweetFromTwitterObject($player, $data) { if(isset($data->extended_tweet->full_text)) $text = $data->extended_tweet->full_text; else $text = $data->text; // Unshorten URLs if(isset($data->entities->urls)) { foreach($data->entities->urls as $url) { $text = str_replace($url->url, $url->expanded_url, $text); } } // Remove media URLs from tweet text $photos = []; if(isset($data->extended_entities->media)) { foreach($data->extended_entities->media as $media) { $text = str_replace($media->url, '', $text); $photos[] = $media->media_url_https; } $text = trim($text); } $mission_id = 0; foreach(Mission::all() as $mission) { if(strpos($text, $mission->hashtag) !== false) { $mission_id = $mission->id; } } $tweet = new Tweet; $tweet->tweet_id = $data->id_str; $tweet->player_id = $player ? $player->id : 0; $tweet->team_id = $player ? $player->team->id : 0; $tweet->text = $text; $tweet->photo = json_encode($photos, JSON_UNESCAPED_SLASHES); $tweet->mission_id = $mission_id; $tweet->tweet_date = date('Y-m-d H:i:s', strtotime($data->created_at)); $tweet->geo = json_encode($data->geo); $tweet->place = json_encode($data->place); $tweet->author_username = $data->user->screen_name; $tweet->author_photo = $data->user->profile_image_url_https; $tweet->json = json_encode($data); return $tweet; } }