Connexion avec Twitter (API)  11 min  

Bonjour,

Aujourd'hui nous allons voir un nouveau tutoriel, cela sera une petite série de tutoriel. Aujourd'hui c'est le tutoriel pour Twitter.
Nous allons déjà parler de ce que vous aurez besoin afin de faire le tutoriel.

Pré-requis

Un site web avec PHP (la base 😄)
Une application Twitter (cliquez ici)
Un accès FTP
Un accès BDD

Etape 1

Voilà! Nous y sommes, vous avez toutes les choses requises, nous pouvons continuer avec la première étape.
La base de donnée !

CREATE TABLE `twitter__connect` 
  ( 
     `id`       INT NOT NULL auto_increment, 
     `name`     VARCHAR(255) NOT NULL,
     `id_twitter`    VARCHAR(255) NOT NULL, 
     `date`     TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
     PRIMARY KEY (`id`) 
  ) 
engine = innodb; 

Nous prenons dans ce tutoriel le minimum possible. Vous pouvez bien sûr ajouter des champs en plus (l'avatar, ect...).

Etape 2

Pour continuer, nous allons créer une application Twitter.
Pour cela, remplissez toutes les cases en cochant la case Enable Sign in with Twitter! C'est cela qui fera la possibilité de pouvoir se connecter depuis Twitter sur votre site internet! Je vous conseil de mettre la permission suivante: Read-only

Etape 3

Nous y voilà à la dernière étape. Cette étape sera donc le back-end.
Dans ce tutoriel, nous passons l'étape de la "Configuration de la bdd", nous passons directement au formulaire ect...

Pour cela, vous aurez besoin de l'api Twitter (PHP). Pour cela télécharger celle que nous utilisons sur Dev-Time. Il faudra donc que vous suivez l'installation de l'api (via Composer).

Une fois tous cela terminé, nous commençons réellement la partie en PHP.

<?php
error_reporting(0);
if (!$_SESSION['twitter_id']) {
	$online_user = "no";
}else{
	$online_user = "yes";
}


require_once('twitteroauth/twitteroauth.php'); // API Twitter
//1 - Configuration de l'api
    $consumer_key=''; //application consumer key
    $consumer_secret=''; //application consumer secret
    $oauth_token = ''; //oAuth Token
    $oauth_token_secret = ''; //oAuth Token Secret


// OAuth token
if(isset($_REQUEST['oauth_token']) && $_SESSION['token'] !== $_REQUEST['oauth_token']){ 
    //Suppression de la connexion actuelle
    unset($_SESSION['token']); 
    unset($_SESSION['token_secret']); 
} 
 
if(isset($_SESSION['status']) && $_SESSION['status'] == 'verified' && !empty($_SESSION['request_vars'])){ 
	
    $oauthToken       = $_SESSION['request_vars']['oauth_token']; 
    $oauthTokenSecret = $_SESSION['request_vars']['oauth_token_secret']; 
	
	$twClient = new TwitterOAuth($consumer_key, $consumer_secret, $oauthToken, $oauthTokenSecret); 
	
    $username         = $_SESSION['request_vars']['screen_name'];
	$query_tweets00 = 'https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name='.$username.'&count=1'; //Your Twitter API query
    $myTweets00 = $twClient->get($query_tweets00);
    foreach($myTweets00  as $tweet00){
	$logo             = $tweet00->user->profile_image_url_https;	
    $banner           = $tweet00->user->profile_banner_url;
	$screen_name      = $tweet00->user->screen_name;
	}
    $twitterId        = $_SESSION['request_vars']['user_id'];
     
    // Publication de tweet
    if(isset($_POST["updateme"])){ 
	    $twClient->post("https://api.twitter.com/1.1/statuses/update.json", ["status" => $_POST['updateme']]);
		if ($twClient->http_code == 200) {
		$message = "<div class='alert alert-success'>Le tweet vient d'être publié!</div>";
		} else {
		$message = "<div class='alert alert-danger'>Le tweet n'est pas publié!</div>";
		}
    } 
     
    // Verification de utilisateur connecté
	if($online_user == "yes"){
     
    // Vos tweets
	$query_tweets = 'https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name='.$username.'&count=5'; //Your Twitter API query
    $myTweets = $twClient->get($query_tweets);
     
	}else{
		// Insertion de l'inscription de l'utilisateur
		
    if(empty($_SESSION['twitter_id'])){
    	$select = $bdd->prepare('SELECT * FROM users WHERE twitter_id = ?');
    	$select->execute(array($_SESSION['request_vars']['user_id']));
     	$count = $select->RowCount();
    	if($count == 0){
    	    $insert = $bdd->prepare('INSERT INTO `user`(`name`, `id_twitter`) VALUES (?, ?)');
     	    $insert->execute(array($_SESSION['request_vars']['screen_name'], $_SESSION['request_vars']['user_id']));
            echo '<div class="alert alert-success" role="alert">Succès: Ce compte vient d\'être créé !</div>';
    	}else{
    		$selinfo = $sel->fetch();
    		echo '<div class="alert alert-success" role="alert">Vous êtes connecté!</div>';
    		$_SESSION['twitter_id'] = $selinfo['id_twitter'];	
    	}
    } 
	}
}elseif(isset($_REQUEST['oauth_token']) && $_SESSION['token'] == $_REQUEST['oauth_token']){ 
    // Appel de l'api twitter
    $twClient = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['token'] , $_SESSION['token_secret']); 
     
    // OAuth token 
    $access_token = $twClient->getAccessToken($_REQUEST['oauth_verifier']); 
     
    // Si on retourne un succès
    if($twClient->http_code == '200'){ 
        $_SESSION['status'] = 'verified'; 
        $_SESSION['request_vars'] = $access_token; 
         
        // Informations de la personne qui se connecte depuis twitter
        $userInfo = $twClient->get('account/verify_credentials'); 

		header('connect/twitter'); 
        exit;
         
        // Suppression du oauth token et secret de la session
        unset($_SESSION['token']); 
        unset($_SESSION['token_secret']); 
         
        // Retour a l'accueil dès déconnecté
        header('Location: ./'); 
    }else{ 
        $output = '<h3 style="color:red">Une erreur est survenue</h3>'; 
    } 
}else{ 
    // Fresh authentication 
    $twClient = new TwitterOAuth($consumer_key, $consumer_secret); 
    $request_token = $twClient->getRequestToken('connect/twitter'); 
     
    // Info du token pour twitter 
    $_SESSION['token']         = $request_token['oauth_token']; 
    $_SESSION['token_secret']= $request_token['oauth_token_secret']; 
     
    // Si l'auth retourne un succès
    if($twClient->http_code == '200'){ 
        // Get twitter oauth url 
        $authUrl = $twClient->getAuthorizeURL($request_token['oauth_token']); 
         
        // Bouton de connexion
        $output = '<div class="col col-xl-12 order xl-2 col-12 order-lg-2 col-md-12 order-md-1 col-sm-12 col-12">
					    	<div class="ui-block">
					    	    <div class="ui-block-title">
					    	        <h6 class="title">Connexion avec Twitter</h6>
					    	    </div>
								<div class="ui-block-content">
							    	<a href="'.filter_var($authUrl, FILTER_SANITIZE_URL).'">Se connecter</a>
								</div>
							</div>
						</div>'; 
    }else{ 
        $output = '<h3 style="color:red">Une erreur est survenue lors de la connexion</h3>'; 
    } 
} 
?>
<div class="header-spacer" style="height: 69px;"></div>
<?php if(empty($_SESSION['request_vars']['screen_name'])){ ?>
<div class="main-header">
	<div class="content-bg-wrap bg-account" style="width: 100%;"></div>
	<div class="container">
		<div class="row">
			<div class="col col-lg-8 m-auto col-md-8 col-sm-12 col-12">
				<div class="main-header-content">
					<h1>Connexion avec twitter</h1>
				</div>
			</div>
		</div>
	</div>
</div>
<?php } ?>

<div class="container">
    <div class="row">
    <?php echo $output; ?>
	<?php if($online_user == "yes"){ ?>
	<?php if(!empty($_SESSION['request_vars']['screen_name'])){ ?>
	<div class="container">
	<div class="row">
		<div class="col col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12">
			<div class="ui-block">
				<div class="top-header">
					<div class="top-header-thumb" style="background-color: #1e2024;background-image: url(<?= $banner; ?>);background-size: cover;background-repeat: no-repeat;background-position: 50% 50%;text-align: center;padding: 150px 0;position: relative;">
					</div>
					<div class="profile-section">
						<div class="row">
							<div class="col col-lg-5 col-md-5 col-sm-12 col-12">
								<ul class="profile-menu">
									<li>
										<a href="<?= base_url("connect/twitter"); ?>" <?php if($_SERVER['REQUEST_URI'] == '/connect/twitter'){ ?> class="active"<?php } ?>><?= $this->lang->line('posts_user'); ?></a>
									</li>
								</ul>
							</div>
							<div class="col col-lg-5 ml-auto col-md-5 col-sm-12 col-12">
								<ul class="profile-menu">
									<li>
										<a href="https://twitter.com/<?= $screen_name; ?>">Twitter</a>
									</li>
								</ul>
							</div>
						</div>

						<div class="control-block-button">
						</div>
					</div>
					<div class="top-header-author">
						<a href="<?= base_url($user['url']); ?>" class="author-thumb">
							<img src="<?= $logo; ?>" width="120px" height="120px" alt="author">
						</a>
						<div class="author-content">
							<a href="<?= base_url($user['url']); ?>" class="h4 author-name"><?= $username; ?></a>
							<div class="country">@<?= $screen_name; ?></div>
						</div>
					</div>
				</div>
			</div>
		</div>
	</div>
</div>		
		
	            		<div class="col col-xl-8 order-xl-2 col-lg-8 order-lg-2 col-md-8 order-md-1 col-sm-8 col-8">
						<?php if(isset($_POST["updateme"])){  ?>
						    <?= $message; ?>
						<?php } ?>
                			<div class="ui-block">
                				<div class="ui-block-title">
                					<h6 class="title"><?= $username; ?></h6>
                				</div>
                			    <div class="ui-block-content">
							        <form method="post" action="">
                                        <div class="row">
                                            <div class="col-md-12">
                                            <!-- Name -->
											    <textarea name="updateme"class="form-control mb-4" placeholder="Votre message"></textarea>
                                            </div>
                                        </div>
                                        <div class="text-center text-md-left">
                                            <button name="submit" class="btn btn-primary">Publier</button>
                                        </div>
							        </form>	
								</div>
						    </div>
						</div>
						<div class="col col-xl-4 order xl-2 col-4 order-lg-2 col-md-4 order-md-1 col-sm-4 col-4">
					    	<div class="ui-block">
					    	    <div class="ui-block-title">
					    	        <h6 class="title">Twitter</h6>
					    	    </div>

					    	    <!-- W-Twitter -->
				
					    	    <ul class="widget w-twitter">
								<?php foreach($myTweets  as $tweet){ ?>
					    	        <li class="twitter-item">
					    	            <div class="author-folder">
					    	                <img src="<?= $logo; ?>" alt="avatar">
					    	                <div class="author">
					    	                    <a href="#" class="author-name"><?= $username; ?></a>
					    	                    <a href="#" class="group">@<?= $screen_name; ?></a>
					    	                </div>
					    	            </div>
					    	            <p><a href="https://twitter.com/<?= $screen_name; ?>/status/<?= $tweet->id; ?>"><?= $tweet->text; ?></a></p>
					    	            <span class="post__date">
					    	                <time class="published" datetime="<?= $tweet->created_at; ?>">
					    	                    <?= $tweet->created_at; ?> <i><?= $tweet->source; ?></i>
					    	                </time>
					    	            </span>
					    	        </li>
								<?php } ?>
								</ul>
							</div>
						</div>
	    <?php } ?>
	<?php } ?>
	</div>
</div>

Et voilà! C'est à présent terminé! Vous devez modifier le 1/ en mettant vos identifiants de votre application Twitter.

Auteur

KilioZ

Étudiant en BTS Travaux Publics au Pas-de-Calais. Fondateur du réseau social Dev-Time, développeur web depuis 2013.


  Discord : Matéo M.#6452   Reddit : KilioZDev