|
|
- <?php
- namespace App\Http\Controllers;
-
- use Illuminate\Http\Request;
- use Illuminate\Routing\Controller as BaseController;
- use Log;
- use App\Player, App\Team, App\Tweet, App\TransitCenter, App\TransitLine, App\Document, App\Mission;
- use App\Events\NewTweetEvent;
- use Twitter;
-
- class ImportController extends BaseController
- {
- public function __construct() {
- $this->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;
- }
-
- }
|