Як отримати токен доступу до Instagram


76

Я справді боюся з тим, як я маю отримати свій маркер доступу для Instagram,

Я зареєстрував нового клієнта, а потім використав цю URL-адресу

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

заповнити ідентифікатор клієнта та перенаправити URL-адресу.

Потім мене перенаправили на сторінку, де він відображав код в URL-адресі, але звідти я не маю уявлення, де ідентифікатор потім отримує мій маркер доступу.


1
Дійсно пізня відповідь, але нещодавно мені довелося це зробити, тому я створив навчальний посібник (готовий до того, коли мені доведеться це зробити знову) див.: Bobmckay.com/web/…
пан Фетт,


Отримайте його за допомогою свого акаунта instagram.pixelunion.net ... надзвичайно просто.
повстання

Відповіді:


48

Посилання на офіційну документацію API є http://instagram.com/developer/authentication/

Короткий короткий - два кроки:

Отримати код

Відкрийте https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code з інформацією з http://instagram.com/developer/clients/manage/

Отримати маркер доступу

curl \-F 'client_id=CLIENT-ID' \
    -F 'client_secret=CLIENT-SECRET' \
    -F 'grant_type=authorization_code' \
    -F 'redirect_uri=YOUR-REDIRECT-URI' \
    -F 'code=CODE' \
    https://api.instagram.com/oauth/access_token

1
Це єдине, що мені вдалося. Інші відповіді вище вже не працюють. Я дотримувався цього підручника тут dmolsen.com/2013/04/05/generating-access-tokens-for-instagram
Філ

3
Чи можна отримати код https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=codeбезпосередньо? Або мені справді потрібно мати іншу кінцеву точку, щоб просто вловити повернення коду? Це складно і дратує
tom10271,

3
Якщо ви встановите маркер response_type як маркер, він працює. У мене це не працювало з кодом.
Rorok_89

@aokaddaoc Вам не потрібно мати іншу кінцеву точку, Instagram перенаправить на цей URI, передаючи маркер на URL-адресу, як уhttp://your-redirect-uri#access_token=ACCESS-TOKEN
Бруно Перес

4
зараз instagram змінив свій api, ми не можемо отримати код
Шакті

12

Майже всі відповіді, які досі публікували люди, охоплюють лише те, як обробляти маркери доступу на передній панелі, дотримуючись процедури "неявної автентифікації" на стороні клієнта Instagram. Цей спосіб менш безпечний і не рекомендується згідно з документами API Instagram.

Припускаючи, що ви використовуєте сервер, документи Instagram начебто не дають чіткої відповіді про обмін коду на маркер, оскільки вони дають лише приклад запиту cURL. По суті, вам потрібно зробити запит POST на їхній сервер із зазначеним кодом та всією інформацією про вашу програму, і вони повернуть об’єкт користувача, включаючи інформацію про користувача та маркер.

Я не знаю, якою мовою ви пишете, але я вирішив це в Node.js за допомогою модуля запиту npm, який ви можете знайти тут .

Я проаналізував URL-адресу та використав цю інформацію для надсилання запиту на публікацію

var code = req.url.split('code=')[1];

request.post(
  { form: { client_id: configAuth.instagramAuth.clientID,
            client_secret: configAuth.instagramAuth.clientSecret,
            grant_type: 'authorization_code',
            redirect_uri: configAuth.instagramAuth.callbackURL,
            code: code
          },
    url: 'https://api.instagram.com/oauth/access_token'
  },
  function (err, response, body) {
    if (err) {
      console.log("error in Post", err)
    }else{
      console.log(JSON.parse(body))
    }
  }
);

Звичайно, замініть матеріали configAuth на власну інформацію. Можливо, ви не використовуєте Node.js, але, сподіваємось, це рішення допоможе вам перекласти своє власне рішення на будь-яку мову, якою ви його використовуєте.


10

У мене була та сама проблема раніше, але я міняю URL-адресу на цей
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token


3
Так! - це працює - станом на те, як зараз працює instagram, це має бути найкращою відповіддю на менш безпечні серверні запити. Приклад: Мені просто потрібно отримати кілька останніх зображень для користувача. -Зніміть прапорець Вимкнути імплкт-OAuth на вкладці безпеки на сторінці розробників вашого Instagram. -Використовуйте вищезазначену URL-адресу із заміненими значеннями -отримати маркер доступу з URI перенаправлення. Тепер ви можете робити такі прості речі, як api.instagram.com/v1/users/ [ІДЕНТИФІКЕНТ КЛІЄНТА ] / media / recent /? Access_token = [TOKEN] У будь-якому випадку не потрібно бути настільки безпечним - instagram має надто складні запити, подібні до цього.
Тайкон

6

API Instagram призначений не тільки для вас, але й для будь-якого користувача Instagram, який потенційно може пройти автентифікацію за допомогою вашого додатка. Я дотримувався інструкцій на веб-сайті Instagram Dev . Використовуючи перший (явний) метод, я зміг зробити це досить легко на сервері.

Крок 1) Додайте посилання або кнопку на свою веб-сторінку, яку користувач може натиснути, щоб розпочати процес автентифікації:

<a href="https://api.instagram.com/oauth/authorize/?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code">Get Started</a>

YOUR_CLIENT_IDі YOUR_REDIRECT_URIбуде видано вам після успішної реєстрації вашого додатка в серверній мережі Instagram разом із YOUR_CLIENT_SECRETвживаними нижче.

Крок 2) На URI, який ви визначили для своєї програми, який є таким самим, як YOUR_REDIRECT_URIі вам, потрібно прийняти відповідь від сервера Instagram. Сервер Instagram поверне вам codeзмінну у запиті. Потім вам потрібно використовувати цю codeта іншу інформацію про вашу програму, щоб зробити ще один запит безпосередньо з вашого сервера на отриманняaccess_token . Я зробив це в python, використовуючи фреймворк Django, наступним чином:

прямий django до responseфункції у urls.py:

from django.conf.urls import url

from . import views

app_name = 'main'
urlpatterns = [
        url(r'^$', views.index, name='index'),
        url(r'^response/', views.response, name='response'),
]

Ось responseфункція, яка обробляє запит views.py:

from django.shortcuts import render
import urllib
import urllib2
import json

def response(request):
    if 'code' in request.GET:
        url = 'https://api.instagram.com/oauth/access_token'
        values = {
            'client_id':'YOUR_CLIENT_ID',
            'client_secret':'YOUR_CLIENT_SECRET',
            'redirect_uri':'YOUR_REDIRECT_URI',
            'code':request.GET.get('code'),
            'grant_type':'authorization_code'
        }
        data = urllib.urlencode(values)
        req = urllib2.Request(url, data)
        response = urllib2.urlopen(req)
        response_string = response.read()
        insta_data = json.loads(response_string)
        if 'access_token' in insta_data and 'user' in insta_data:
            #authentication success
            return render(request, 'main/response.html')
        else:
            #authentication failure after step 2
            return render(request, 'main/auth_error.html')
    elif 'error' in req.GET:
        #authentication failure after step 1
        return render(request, 'main/auth_error.html')

Це лише один із способів, але процес повинен бути майже однаковим у PHP або будь-якій іншій мові на стороні сервера.


6

Простий спосіб, який працює в 2019 році

Вимкніть неявний oauth під автентифікацією безпеки, а потім завантажте це:

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

Вкажіть REDIRECT-URI у своєму обліковому записі та введіть його точно так, як вказано.


2

Токен доступу повертається як фрагмент URI після того, як ви дозволите програмі використовувати ваші дані Instagram. Це має виглядати приблизно так: введіть тут опис зображення


5
Я все ще повністю загублений, я в основному просто втягую свою стрічку в Instagram на свій веб-сайт, тому я не знаю, як отримати те, що ви показали вище
Джеррі Мкей,

Існує два потоки при спробі отримати маркер доступу. Для початківців видається найпростішим використовувати "Клієнтську (неявну) автентифікацію". Не знаючи, що ви спробували або де саме ви застрягли, важко спрямувати вас у правильному напрямку. Кілька тижнів тому я написав короткий блог, який може допомогти. symmetricinfinity.com/2013/04/06/…
Адам

1
Дійсно пізня відповідь, але нещодавно мені довелося це зробити, тому я створив навчальний посібник (готовий до того, коли мені доведеться це зробити знову), див .: bobmckay.com/web/…
пан Фетт,

у цьому випадку використовуйте javascript. access_token = location.hash.replace ('# access_token =', '');
user1021860

1

Спробуйте це:

http://dmolsen.com/2013/04/05/generating-access-tokens-for-instagram/

після отримання коду ви можете зробити щось на зразок:

curl -F 'client_id=[your_client_id]' -F 'client_secret=[your_secret_key]' -F 'grant_type=authorization_code' -F 'redirect_uri=[redirect_url]' -F 'code=[code]' https://api.instagram.com/oauth/access_token

1
що саме таке redirect_URL? Я не можу знайти його у своєму керуючому обліковому записі на панелі розробника instagram
Mona Jalal

1
Redirect_URL - це URL-адреса, на яку повертається відповідь Instagram. Тож справа не в панелі розробника. Це той, який ви створюєте, щоб отримати відповідь назад у своєму додатку / на веб-сайті.
boyfromnorth

1

На 100% працює цей код

<a id="button" class="instagram-token-button" href="https://api.instagram.com/oauth/authorize/?client_id=CLIENT_ID&redirect_uri=REDIRECT_URL&response_type=code">Click here to get your Instagram Access Token and User ID</a>
<?PHP
  if (isset($_GET['code'])) {

        $code = $_GET['code'];

        $client_id='< YOUR CLIENT ID >';
        $redirect_uri='< YOUR REDIRECT URL >';
        $client_secret='< YOUR CLIENT SECRET >';
        $url='https://api.instagram.com/oauth/access_token';

        $request_fields = array(
            'client_id' => $client_id,
            'client_secret' => $client_secret,
            'grant_type' => 'authorization_code',
            'redirect_uri' => $redirect_uri,
            'code' => $code
        );

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        $request_fields = http_build_query($request_fields);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $request_fields);
        $results = curl_exec($ch); 
        $results = json_decode($results,true);
        $access_token = $results['access_token'];

        echo $access_token;

        exit();
    }

?>

2
Ласкаво просимо до Stack Overflow! Хоча цей код може відповісти на питання, краще включити деякий контекст, пояснивши, як він працює і коли його використовувати. Відповіді лише на коди, як правило, менш корисні в довгостроковій перспективі. Дивіться Як написати хорошу відповідь? для отримання додаткової інформації.
Марк Ормешер

Будь ласка , подивіться на це: stackoverflow.com/questions/59052304 / ...
user2028

0

Це добре працювало для мене:

http://jelled.com/instagram/access-token

FYI, я використовував його в поєднанні з плагіном jQuery Instagram, який ви знайдете тут; http://potomak.github.com/jquery-instagram


3
Будь ласка, відредагуйте свою відповідь, щоб надати більш суттєве пояснення? Відповіді лише на посилання, як правило, приваблюють тісні голоси.
Gayot Fow

На жаль, Instagram змусив його зняти свій сайт. Раніше це працювало чудово.
Dex

0

Якщо ви шукаєте інструкції, перевірити цю статтю пост . І якщо ви використовуєте C # ASP.NET, подивіться це репо .


1
і його немає ... degs.io зник.
JP Hellemons

0

За допомогою https://www.hurl.it/ я зміг побачити таке: {"code": 400, "error_type": "OAuthException", "error_message": "Відповідний код не знайдено або вже був використаний." }

отже: ви повинні отримувати новий код для кожного запиту.


0

Якщо ви не хочете створювати свою сторону сервера, як, наприклад, розробку на стороні клієнта (веб-програма чи мобільний додаток), ви можете вибрати неявну автентифікацію .

Як сказано в документі, спочатку зробіть https-запит за допомогою

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

Заповніть ІДЕНТИФІКАТОР КЛІЄНТА та ВИКОРИСТАНУ URL-адресу яку Ви вказали.

Тоді це переходить на сторінку входу, але найголовніше - як отримати маркер доступу після правильного входу користувача.

Після того, як користувач натисне кнопку входу з правильним обліковим записом і паролем, веб-сторінка перенаправить на вказану вами URL-адресу, а потім новий маркер доступу.

http: // your-redirect-uri # access_token = ACCESS-TOKEN

Я не знайомий з javascript, але в студії Android це простий спосіб додати слухача, який прослуховує подію, веб-сторінка замінює URL-адресу на нову URL-адресу (подія перенаправлення), тоді вона передає рядок URL-адреси перенаправлення до ви, так що ви можете легко розділити його, щоб отримати маркер доступу, як:

Рядок access_token = url.split ("=") [1];

Засіб розбити URL-адресу в масив рядків у кожному символі "=", тоді маркер доступу очевидно існує за адресою [1].


-1

перейти на сторінку управління клінет в:

http://www.instagram.com/developer/

встановити URL-адресу переспрямування

тоді :

використовуйте цей код, щоб отримати маркер доступу:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>tst</title>
<script src="../jq.js"></script>
<script type="text/javascript">
       $.ajax({
            type: 'GET',
            url: 'https://api.instagram.com/oauth/authorize/?client_id=CLIENT-‌​ID&redirect_uri=REDI‌RECT-URI&response_ty‌pe=code'
            dataType: 'jsonp'}).done(function(response){
                var access = window.location.hash.substring(14);
                //you have access token in access var   
            });
</script>
</head>
<body>  
</body>
</html>

У вас відсутня кома, безпосередньо перед dataType: .... Я не можу редагувати, оскільки SO потребує щонайменше 6 символів.
malteseKnight
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.