بروزرسانی در ۷ آذر ۱۳۹۹ : تغییر API اینستاگرام و افزودن سورس جدید به باکس دانلود
در این آموزش قصد داریم به شما نحوه لاگین شدن با instagram در PHP به منظور احراز هویت کاربر در سیستم لاگین اپلیکیشن وب را نشان بدیم.
در مقالات قبلی نحوه لاگین شده با API سیستم های معروف را آموزش دادیم :
- لاگین شدن با twitter در php
- عضویت و لاگین در سایت با گوگل
- لاگین شدن با Linkedin در php
- لاگین شدن با Github در PHP
لاگین شدن با اینستاگرام به ما این امکان را می دهد که با استفاده از اکانت اینستاگرام, احراز هویت را برای لاگین در سایت انجام بدیم.
از آنجا که فرایند احراز هویت (Authenticate) با API اینستاگرام هندل می شود, پس اپلیکیشن وب نیازی به قابلیت ثبت نام کاربر ندارد.
لاگین شدن با instagram در PHP یک دسترسی سریع بدون ثبت نام را در اختیار کاربر می دهد که باعث افزایش کاربران سایت می شود.
API اینستاگرام از OAuth 2.0 برای احراز هویت کاربر استفاده می کند بنابراین به راحتی می توانید سیستم لاگین شدن با اینستاگرام را با API را پیاده سازی کنید.
cURL یک راه ساده و مفید را برای دسترسی به API اینستاگرام با PHP را ارایه می دهد که در این آموزش از آن استفاده می کنیم.
در ورژن جدید کدها کامل تغییر کرده و دیگر کدهای این صفحه کاربردی ندارند و حتما از باکس دانلود کدهای جدید و تست شده را دانلود و استفاده کنید.
در مثال لاگین شدن با instagram در PHP قابلیت های زیر را پیاده می کنیم.
- احراز هویت با اکانت اینستاگرام با استفاده از
access_token
- دریافت اطلاعات پروفایل کاربر از اکانت اینستاگرام
- ذخیره اطلاعات پروفایل در دیتابیس توسط PHP و MySQL
- نمایش اطلاعات اکانت کاربر
قبل از شروع آموزش لاگین شدن با instagram در PHP , نگاهی کنید به ساختار فایل های پروژه :
1 2 3 4 5 6 7 8 |
instagram_login_with_php/ ├── config.php ├── index.php ├── logout.php ├── User.class.php ├── InstagramAuth.class.php ├── images/ └── css/ |
ثبت نام کلاینت ID اینستاگرام
برای دسترسی به API اینستاگرام نیاز به Client ID و Client Secret داریم.
قبل شروع به پیاده سازی لاگین شدن با instagram در PHP روی وبسایت, مراحل زیر را برای ساخت یک کلاینت جدید اینستاگرام و دریافت Client ID & Secret دنبال کنید.
- وارد Instagram Developer Panel شوید.
- به عنوان توسعه دهنده ثبت نام و وارد اکانت خود شوید.
- به صفحه Manage Clients شوید و روی دکمه Register a New Client کلیک کنید.
- فیلدها را تکمیل و روی Register کلیک کنید
- Valid redirect URIs باید با آدرس url اسکریپت شما روی هاست (دامنه + فولدر اسکریپت) در زمان درخواست API یکی باشد.
بعد از ساخت Api در صفحه Manage Clients روی دکمه MANAGE کلیک کنید.
در صفحه جزئیات App می توانید Client ID و Client Secret را ببنید که بعدا این اطلاعات را در اسکریپت استفاده می کنیم.
ساخت جدول دیتابیس
برای ذخیره کردن اطلاعات پروفایل کاربر از اینستاگرام, نیاز به ساخت یک جدول در دیتابیس داریم.
کد SQL زیر یک جدول users
با فیلد های موردنیاز را در دیتابیس MySQL ایجاد می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `oauth_provider` enum('instagram','facebook','google','linkedin','') COLLATE utf8_unicode_ci NOT NULL, `oauth_uid` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `first_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `username` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `gender` varchar(5) COLLATE utf8_unicode_ci NOT NULL, `picture` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `link` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; |
کتابخانه OAuth اینستاگرام
کلاس InstagramAuth
به ما کمک می کند که با احرازهویت با API اینستاگرام در PHP را براحتی انجام بدیم.
getAccessToken()
– توکن دسترسی (access_token
) را با استفاده از cURL در PHP دریافت می کند.getUserProfileInfo()
– اطلاعات پروفایل کاربر را توسطaccess_token
از api اینستاگرام واکشی می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
<?php /* * Instagram API Class * This class helps to authenticate with Instagram API * @author NetParadis.com * @url http://www.netparadis.com */ class InstagramAuth { public $client_id = ''; public $client_secret = ''; public $redirect_url = ''; private $act_url = 'https://api.instagram.com/oauth/access_token'; private $ud_url = 'https://api.instagram.com/v1/users/self/'; public function __construct(array $config = array()){ $this->initialize($config); } public function initialize(array $config = array()){ foreach ($config as $key => $val){ if (isset($this->$key)){ $this->$key = $val; } } return $this; } public function getAuthURL(){ $authURL = "https://api.instagram.com/oauth/authorize/?client_id=" . $this->client_id . "&redirect_uri=" . urlencode($this->redirect_url) . "&response_type=code&scope=basic"; return $authURL; } public function getAccessToken($code) { $urlPost = 'client_id='. $this->client_id . '&client_secret=' . $this->client_secret . '&redirect_uri=' . $this->redirect_url . '&code='. $code . '&grant_type=authorization_code'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->act_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_POSTFIELDS, $urlPost); $data = json_decode(curl_exec($ch), true); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if($http_code != '200'){ throw new Exception('Error : Failed to receive access token'.$http_code); } return $data['access_token']; } public function getUserProfileInfo($access_token) { $url = $this->ud_url.'?access_token=' . $access_token; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $data = json_decode(curl_exec($ch), true); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if($data['meta']['code'] != 200 || $http_code != 200){ throw new Exception('Error : Failed to get user information'); } return $data['data']; } } |
کلاس User (فایل User.class.php)
کلاس User
عملیات مربوط به دیتابیس (اتصال, اینسرت و آپدیت) را با استفاده از PHP و MySQL مدیریت می کند.
- متد
__construct()
– اتصال به دیتابیس MySQL - متد
checkUser()
– داده های اکانت کاربر (اطلاعات پروفایل اینستاگرام) را ذخیره/آپدیت می کند. همچنین اطلاعات کاربر را بصورت یک آرایه برگشت می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<?php /* * User Class * This class is used for database related (connect, insert, and update) operations * @author NetParadis.com * @url http://www.netparadis.com */ class User { private $dbHost = DB_HOST; private $dbUsername = DB_USERNAME; private $dbPassword = DB_PASSWORD; private $dbName = DB_NAME; private $userTbl = DB_USER_TBL; function __construct(){ if(!isset($this->db)){ // Connect to the database $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName); if($conn->connect_error){ die("Failed to connect with MySQL: " . $conn->connect_error); }else{ $this->db = $conn; } } } function checkUser($userData = array()){ if(!empty($userData)){ // Check whether user data already exists in database $prevQuery = "SELECT * FROM ".$this->userTbl." WHERE oauth_provider = '".$userData['oauth_provider']."' AND oauth_uid = '".$userData['oauth_uid']."'"; $prevResult = $this->db->query($prevQuery); if($prevResult->num_rows > 0){ // Update user data if already exists $query = "UPDATE ".$this->userTbl." SET first_name = '".$userData['first_name']."', last_name = '".$userData['last_name']."', email = '".$userData['email']."', gender = '".$userData['gender']."', picture = '".$userData['picture']."', link = '".$userData['link']."', modified = NOW() WHERE oauth_provider = '".$userData['oauth_provider']."' AND oauth_uid = '".$userData['oauth_uid']."'"; $update = $this->db->query($query); }else{ // Insert user data $query = "INSERT INTO ".$this->userTbl." SET oauth_provider = '".$userData['oauth_provider']."', oauth_uid = '".$userData['oauth_uid']."', first_name = '".$userData['first_name']."', last_name = '".$userData['last_name']."', email = '".$userData['email']."', gender = '".$userData['gender']."', picture = '".$userData['picture']."', link = '".$userData['link']."', created = NOW(), modified = NOW()"; $insert = $this->db->query($query); } // Get user data from the database $result = $this->db->query($prevQuery); $userData = $result->fetch_assoc(); } // Return user data return $userData; } } |
فایل پیکربندی (config.php)
تنظیمات دیتابیس و اطلاعات API اینستاگرام به عنوان ثابت در فایل config.php تعریف شدند.
ثابت های دیتابیس :
DB_HOST
– هاست دیتابیس (پیشفرض localhost)DB_USERNAME
– نام کاربری دیتابیسDB_PASSWORD
– رمزعبور دیتابیسDB_NAME
– نام دیتابیسDB_USER_TBL
– نام جدولی که اطلاعات کاربر در آن ذخیره می شود
ثابت های API اینستاگرام :
INSTAGRAM_CLIENT_ID
– کلاینت آیدیINSTAGRAM_CLIENT_SECRET
– کلاینت سکرتINSTAGRAM_REDIRECT_URI
– آدرس بازگشتی بعد از لاگین
ساخت آبجکت کلاس احراز هویت اینستاگرام :
کتابخانه احراز هویت اینستاگرام برای اتصال به api و کار با OAuth استفاده شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php /* * Basic Site Settings and API Configuration */ // Database configuration define('DB_HOST', 'MySQL_Database_Host'); define('DB_USERNAME', 'MySQL_Database_Username'); define('DB_PASSWORD', 'MySQL_Database_Password'); define('DB_NAME', 'MySQL_Database_Name'); define('DB_USER_TBL', 'users'); // Instagram API configuration define('INSTAGRAM_CLIENT_ID', 'Instagram_Client_Id'); define('INSTAGRAM_CLIENT_SECRET', 'Instagram_Client_Secret'); define('INSTAGRAM_REDIRECT_URI', 'Callback_URL'); // Start session if(!session_id()){ session_start(); } /* * For the internal purposes only * changes not required */ // Include Instagram OAuth library require_once 'InstagramAuth.class.php'; // Initiate Instagram Auth class $instagram = new InstagramAuth(array( 'client_id' => INSTAGRAM_CLIENT_ID, 'client_secret' => INSTAGRAM_CLIENT_SECRET, 'redirect_url' => INSTAGRAM_REDIRECT_URI )); |
نکته: Client ID و Client Secret را می توانید از صفحه تنظیمات کلاینت اینستاگرام خود پیدا کنید.
لاگین شدن با اینستاگرام و دریافت اطلاعات اکانت (index.php)
در این فایل, فرایند احراز هویت توسط PHP هندل می شود.
در ابتدا, آدرس URL احرازهویت با متد getAuthURL()
از کلاس InstagramAuth
ایجاد و دکمه ورود اینستاگرام در صفحه وب برای کاربر نمایش داده می شود.
اگر کاربر وارد اکانت اینستاگرام خود شد, موارد زیر اتفاق می افتد :
access_token
توسطgetAccessToken()
با استفاده از کدی که در مرحله احراز هویت بدست آوردیم, دریافت می شود.- اطلاعات پروفایل با استفاده از متد
getUserProfileInfo()
از اکانت اینستاگرام دریافت می شود. - اطلاعات اکانت توسط تابع
checkUser()
از کلاسUser
در دیتابیس ذخیره می شود. - اطلاعات اکانت کاربر در سئشن PHP ذخیره می شود/
- جزئیات پروفایل اینستاگرام (آیدی, نام و نام خانوادگی, آواتار و لینک پروفایل) در صفحه وب نمایش داده می شوند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
<?php // Include configuration file require_once 'config.php'; // Include User class require_once 'User.class.php'; // If URL contains 'code' parameter that passed by Instagram in the Redirect URL if(isset($_GET['code'])){ try { // Get the access token $access_token = $instagram->getAccessToken($_GET['code']); // Get user profile info $userData = $instagram->getUserProfileInfo($access_token); } catch (Exception $e) { $authErr = $e->getMessage(); } if(!empty($userData)){ $username = $userData['username']; $full_name = $userData['full_name']; $full_name_arr = explode(' ',$full_name); $first_name = !empty($full_name_arr[0])?$full_name_arr[0]:''; $last_name = !empty($full_name_arr[1])?$full_name_arr[1]:''; $link = 'https://www.instagram.com/'.$username; // Initialize User class $user = new User(); // Getting user's profile data $intUserData = array(); $intUserData['oauth_uid'] = $userData['id']; $intUserData['username'] = $username; $intUserData['first_name'] = $first_name; $intUserData['last_name'] = $last_name; $intUserData['picture'] = !empty($userData['profile_picture'])?$userData['profile_picture']:''; $intUserData['link'] = $link; $intUserData['email'] = ''; $intUserData['gender'] = ''; // Insert or update user data to the database $intUserData['oauth_provider'] = 'instagram'; $userData = $user->checkUser($intUserData); // Storing user data in the session $_SESSION['userData'] = $userData; // Get logout url $logoutURL = INSTAGRAM_REDIRECT_URI.'logout.php'; // Render Instagram profile data $output = '<h2>Instagram Profile Details</h2>'; $output .= '<div class="ac-data">'; $output .= '<img src="'.$userData['picture'].'"/>'; $output .= '<p><b>Account ID:</b> '.$userData['oauth_uid'].'</p>'; $output .= '<p><b>Name:</b> '.$userData['first_name'].' '.$userData['last_name'].'</p>'; $output .= '<p><b>Logged in with:</b> Instagram</p>'; $output .= '<p><b>Profile Link:</b> <a href="'.$userData['link'].'" target="_blank">Click to visit Instagram page</a></p>'; $output .= '<p><b>Logout from <a href="'.$logoutURL.'">Instagram</a></p>'; $output .= '</div>'; }else{ $output = '<h3 style="color:red">Instagram authentication has failed!</h3>'; if(!empty($authErr)){ $output = '<p style="color:red">'.$authErr.'</p>'; } } }else{ // Get login url $authURL = $instagram->getAuthURL(); // Render Instagram login button $output = '<a href="'.htmlspecialchars($authURL).'" class="instagram-btn"><span class="btn-icon"></span><span class="btn-text">Login with Instagram</span></a>'; } ?> <!DOCTYPE html> <html lang="en"> <head> <title>Login with Instagram using PHP by CodexWorld</title> <meta charset="utf-8"> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="container"> <div class="inst-box"> <!-- Display login button / Instagram profile information --> <?php echo $output; ?> </div> </div> </body> </html> |
خروج از حساب (logout.php)
اگر کاربر قصد خارج شدن از حساب کاربری اینستاگرام را داشت, فایل logout.php را اجرا می کند.
با اینکار توکن و اطلاعات کاربر از سئشن حذف و به صفحه اصلی ریدایرکت می شود.
1 2 3 4 5 6 7 |
<?php // Remove user data from session unset($_SESSION['userData']); // Redirect to the homepage header("Location:index.php"); ?> |
جمع بندی لاگین شدن با instagram در PHP
کتابخانه احرازهویت اینستاگرام به ما کمک می کند به راحتی سیستم لاگین با اینستاگرام را با PHP پیاده سازی کنیم.
اسکریپت ارایه شده کار همگام سازی API اینستاگرام را با cURL بسیار آسان کرده است و به راحتی می توانید لاگین شدن را به وبسایت با حداقل تنظیمات API انجام بدید.
امیدوارم از آموزش لاگین شدن با instagram در PHP نهایت استفاده را برده باشید.
کدهای کامل و تست شده با آخرین ورژن api ایسنتاگرام را از باکس دانلود دریافت کنید.
هر سوالی داشتید، از قسمت نظرات ارسال کنید. سریعا، پاسخگوی سوالات شما هستیم.
موفق و پیروز باشید.
سلام میشه در رابطه با این پروژه بهتون زنگ بزنم صحبت کنیم؟
سلام.
اگر میخواید سفارش کار بدید که میتونید از طریق واتساپ در تماس باشید که در بخش ارتباط با ما میتونید شماره واتساپ رو ببینید
https://netparadis.com/contact
سلام. خیر!
خودم دارم پروژه مینویسم. یجایی از پروژه به مشکلم خردم گفتم اگه وقت داشته باشید باهم صحبت کنیم.
$Instagram = new Instagram($access_token);
//get user
$user = $Instagram->getUserData();
echo ‘
’;
//get posts
$posts = $Instagram->getUserMedia();
من میخوام یه کادر بسازم.
لینک پست رو بزارم توش.
و بصورت json تو خروجی
بهم بگه.
این پست عکسه یا ویدیو
چندتا لایک
داره
چندتا کامنت داره
و از این جور اطلاعات.
همه کار هارو درست انجام دادم.
هرچی میگردم نمیتونم چیزی پیدا کنم ک فقط تعداد لایک رو بده یا فقط تعداد کامنمت. یا هرکدومشون.
الان این => getUserData آیدی و نام پیج رو میده.
این هم => getUserMedia تصاویر و ویدیو هارو بر میگردونه.
ایا وقت دارید صحبت کنیم؟
پروژه ای ک دارم مینویسم هزینه ای براش نمیگیرم.
راستش پل ورودم برای استخدام تو ی شرکت هست.
اگه راهنماییم کنین ممنون میشم.
در رابطه با اموزشی هم ک گذاشتید چون قدیمیه و api گرفتن بروز شده نتونستم کار کنم با پروژتون.
مخصوصا تو ست کردن فایل InstagramAuth و config آیا باید تو هر دو فایل اطلاعات خواسته شده رو ست کنیم؟
سلام وقت بخیر
با این روش میشه پست یا استوری دانلود کرد ؟
سلام. ممنون.
خیر
درود بر شما آقای مهندس . سایت تون هر روز عالی تر از قبل میشه . خیلی ممنون
سلام. خوشحالیم که مفید واقع شده.
موفق باشید.
با تشکر از اشتراک گذاری این کد مفید
یک سئوال داشتم هرچند مستقیما مربوط به این مطلب نیست اما به اینستاگرام مربوط میشود:
آیا id اینستاگرام کسی که از طریق (swipe up (See more ، یک سایت را باز میکند توسط اینستاگرام به سایت داده میشود؟
یا به طور کلی آیا راهی هست که بتوان آیدی اینستاگرام کسی که از طریق اینستاگرام وارد سایت ما میشود را در همان سژن بدست آورد؟
این مورد امکانش نیست
سلام
ممنون از به اشتراک گذاری این مطلب .
اما ی موضوعی هست ، مثل اینکه API اینستاگرام عوض شده ، الان کلا تغییر کرده و ی جورایی با سیستم دولوپر فیسبوک یکی شده .
الان باید چیکار کرد ؟
سلام. بروزرسانی شد. از باکس دانلود دریافت کنید.
خیلی مطلب خوبی بود. ممنون از به اشتراک گزاری.
سلام.
خوشحالیم که مفید واقع شده.
موفق باشید.
سلام خسته نباشید من این مراحل رو رفتم ولی پشیمون شدم چگونه می تونم به حالت اول برگردم ؟ خواهش می کنم سریع جواب بدید
سلام ممنون.
دقیقا طبق همین آموزش به جلو برید و کدهای مشابهی که اضافه کردید رو حذف کنید و به حالت قبل بر میگردید.