sns별 api 특징 정리

Cherry·2022년 5월 3일
5

인스타그램

인스타그램 그래프 API

기능

인스타그램 그래프 API는 비즈니스와 크리에이터가 앱에서 인스타그램의 프레젠스를 관리하도록 지원한다. 고객에게 게시물 댓글에 답글 달기, 인사이트 분석, 해시태그로 검색 등의 기능을 지원한다

사용대상

인스타그램 프로페셔널 계정- 인스타그램 비즈니스 및 크리에이터 계정의 소유주

일반적인 사례

개요

  • Instagram API는 Instagram 프로페셔널 계정 (비즈니스 및 크리에이터 계정)에서 데이터에 액세스할 수 있도록 한다.
  • Instagram 프로페셔널 계정은 Facebook 계정을 통해 간접적으로 접근하므로 사용자는 Facebook 계정이 있어야 하고 앱에 로그인할 때 해당 계정을 사용해야 한다.
  • 사용자 인증은 액세스 토큰을 통해 처리된다. 모든 API 요청에는 앱 사용자의 Facebook 사용자 액세스 토큰을 포함해야 한다
  • 이 API는 다음의 권한을 사용한다
    • instagram_basic : 인스타그램 걔정 프로필 정보와 미디어를 읽도록 허용한다
    • instagram_content_publish : 사용자를 대신하여 일반 피드 사진과 동영상 게시물을 만들도록 허용한다
    • instagram_manage_comments : 사용자 대신 댓글을 작성하고 삭제하고 숨기도록 허용한다.
    • instagram_manage_insights : 앱이 페이스북 페이지에 연결된 인스타그램 계정의 인사이트에 접근할 수 있도록 허용한다
    • pages_show_list : 앱이 사용자가 관리하는 페이지의 리스트를 액세스하도록 허용한다. 사용자에게 관리하는 페이지의 리스트를 보여주고 사용자가 페이지를 관리함을 인증하는 것이다.
    • pages_read_engagement : 페이지가 게시한 콘텐츠를 읽고, 팔로워의 데이터, 프로필 사진, 메타 데이터 및 페이지에 대한 기타 인사이트를 읽을 수 있다
    • Instagram 프로페셔널 계정을 Facebook 페이지에 연결해야 API를 통해 데이터에 액세스할 수 있다. 계정이 연결되면 해당 페이지에서 작업을 수행할 수 있는 모든 Facebook 사용자가 앱에 액세스 토큰을 부여할 수 있다. 그러면 이를 API 요청에 사용할 수 있다.

웹사이트에 내 인스타그램 가져오기 (20-11-08 업데이트) instagram api

이 블로그에 인스타그램 프로페셔널 계정으로 전환 및 페이스북 페이지랑 연결하는 방법에 대해서 아주 잘 작성되어 있다.

비즈니스 검색

다른 인스타그램 비즈니스 사용자나 크리에이터에 대한 기본적인 메타데이터를를 가져와서 사용할 수 있다.

엔드포인트

  • GET /{ig-user-id}/business_discovery

사례

요청 예시

curl -i -X GET \
 "https://graph.facebook.com/v3.2/17841405309211844?fields=business_discovery.username(bluebottle){followers_count,media_count,media{comments_count,like_count}}&access_token={access-token}"

응답

{
  "business_discovery": {
    "followers_count": 267793,
    "media_count": 1205,
    "media": {
      "data": [
        {
          "comments_count": 50,
          "like_count": 5841,
          "id": "17858843269216389"
        },
        //...생략...
        {
          "comments_count": 15,
          "like_count": 3895,
          "id": "17856337633208377"
        },
      ],
    },
    "id": "17841401441775531"
  },
  "id": "17841405976406927"
}

콘텐츠 게시

Instagram 그래프 API를 사용하여 Instagram Business 계정에 단일 이미지 또는 동영상(단일 미디어 게시물)을 게시하거나, 여러 이미지와 동영상을 포함한 게시물(슬라이드 게시물)을 게시할 수 있다

제한 사항

  • 크레이터 계정은 지원되지 않음
  • 24시간 이내에 API를 사용하여 게시물을 최대 25개까지만 게시할 수 있음
  • 이미지 형식은 JPEG만 지원 가능
  • 스토리, 쇼핑 태그, 브랜디드 콘텐츠, 필터는 지원되지 않음

엔드포인트

  • POST /{ig-user-id}/media — 미디어를 업로드하고 미디어 컨테이너를 만든다
  • POST /{ig-user-id}/media_publish — 미디어 컨테이너를 사용하여 업로드된 미디어를 게시한다
  • GET /{ig-container-id}?fields=status_code — 미디어 컨테이너 게시 자격 요건과 상태를 확인한다
  • GET /{ig-user-id}/content_publishing_limit — 앱 사용자의 현재 게시 사용 제한 사용량을 확인한다

단일 미디어 게시물

단일 이미지 또는 동영상 게시물을 게시하는 절차는 2단계로 구성됩니다.

  1. [POST /{ig-user-id}/media](https://developers.facebook.com/docs/instagram-api/reference/ig-user/media#creating) 엔드포인트를 사용하여 공개 서버에서 호스팅되는 이미지 또는 동영상에서 컨테이너를 만듭니다.

    요청

    POST https://graph.facebook.com/v13.0/17841400008460056/media
      ?image_url=https//www.example.com/images/bronz-fonz.jpg
      &caption=%23BronzFonz

    응답

    {
      "id": "17889455560051444"  // IG Container ID
    }
  2. [POST /{ig-user-id}/media_publish](https://developers.facebook.com/docs/instagram-api/reference/ig-user/media_publish#creating) 엔드포인트를 사용하여 컨테이너를 게시합니다.

    요청

    POST https://graph.facebook.com/v13.0/17841400008460056/media_publish ?creation_id=17889455560051444

    응답

    {
      "id": "17920238422030506" // IG Media ID
    }

슬라이드 게시물

단일 게시물(슬라이드 게시물)에 이미지, 동영상 또는 그 두 가지의 조합을 최대 10개까지 게시할 수 있습니다. 슬라이드 게시는 3단계 절차로 구성됩니다.

  1. [POST /{ig-user-id}/media](https://developers.facebook.com/docs/instagram-api/reference/ig-user/media#creating) 엔드포인트를 사용하여 슬라이드에 표시할 각 이미지와 동영상에 대해 개별적인 항목 컨테이너를 만듭니다.

    매개변수

    다음의 매개변수는 필수입니다. 추가적으로 지원되는 매개변수는 [POST /{ig-user-id}/media](https://developers.facebook.com/docs/instagram-api/reference/ig-user/media#creating) 엔드포인트 참고 자료를 참조하세요.

    • is_carousel_item — true로 설정합니다. 슬라이드에 표시할 이미지 또는 동영상을 나타냅니다.
    • image_url — (이미지 전용) 이미지에 대한 경로입니다. 전달된 URL을 사용하여 이미지에 cURL을 실행하므로 URL은 공용 서버에 있어야 합니다.
    • media_type — (동영상 전용) VIDEO로 설정합니다. 미디어가 동영상임을 나타냅니다.
    • video_url — (동영상 전용) 동영상에 대한 경로입니다. 전달된 URL을 사용하여 동영상에 cURL을 실행하므로 URL은 공용 서버에 있어야 합니다.

    요청

    curl -i -X POST \
    "https://graph.facebook.com/v13.0/90010177253934/media?image_url=https%3A%2F%2Fsol...&is_carousel_item=true&access_token=EAAOc..."

    응답

    {
      "id": "17899506308402767"
    }
  2. 다시 [POST /{ig-user-id}/media](https://developers.facebook.com/docs/instagram-api/reference/ig-user/media#creating) 엔드포인트를 사용하여 항목에 대해 단일 슬라이드 컨테이너를 만듭니다.

    매개변수

    다음의 매개변수는 필수입니다. 추가적으로 지원되는 매개변수는 [POST /{ig-user-id}/media](https://developers.facebook.com/docs/instagram-api/reference/ig-user/media#creating) 엔드포인트 참고 자료를 참조하세요.

    • media_type — CAROUSEL로 설정합니다. 컨테이너가 슬라이드임을 나타냅니다.
    • children — 게시된 슬라이드에 표시해야 하는 각 이미지와 동영상의 컨테이너 ID(최대 10개)로 구성된 배열입니다. 슬라이드는 이미지, 동영상 또는 그 두 가지의 조합을 모두 합쳐 최대 10개까지 포함할 수 있습니다.

    요청

    curl -i -X POST \
    "https://graph.facebook.com/v13.0/90010177253934/media?image_url=https%3A%2F%2Fsol...&is_carousel_item=true&access_token=EAAOc..."

    응답

    {
      "id": "18000748627392977"
    }
  3. [POST /{ig-user-id}/media_publish](https://developers.facebook.com/docs/instagram-api/reference/ig-user/media_publish#creating) 엔드포인트를 사용하여 슬라이드 컨테이너를 게시합니다.

    creation_id — 슬라이드 컨테이너 ID입니다.

    요청

    curl -i -X POST \
    "https://graph.facebook.com/v13.0/90010177253934/media_publish?creation_id=18000748627392977&access_token=EAAOc..."

    응답

    {
      "id": "90010778390276"
    }

사용 제한 사용량 확인

요청 샘플

GET graph.facebook.com/17841400008460056/content_publishing_limit

응답 샘플

{
  "data": [
    {
      "quota_usage": 2
    }
  ]
}

댓글 관리

엔드포인트

API는 다음과 같은 엔드포인트로 구성됩니다. 매개변수 및 권한 요구 사항에 대한 내용은 각 엔드포인트 참고 자료 문서를 참조하세요.

  • [GET /{ig-media-id}/comments](https://developers.facebook.com/docs/instagram-api/reference/ig-media/comments#reading) — IG 미디어에 대한 댓글 가져오기
  • [GET /{ig-comment-id}/replies](https://developers.facebook.com/docs/instagram-api/reference/ig-comment/replies#read) — IG 댓글에 대한 답글 가져오기
  • [POST /{ig-comment-id}/replies](https://developers.facebook.com/docs/instagram-api/reference/ig-comment/replies#create) — IG 댓글에 답글 달기
  • [POST /{ig-comment-id}](https://developers.facebook.com/docs/instagram-api/reference/ig-comment#update) — IG 댓글 숨기기/표시하기
  • [POST /{ig-media-id}](https://developers.facebook.com/docs/instagram-api/reference/ig-media#update) — IG 미디어에 대한 댓글 비활성화/활성화
  • [DELETE /{ig-comment-id}](https://developers.facebook.com/docs/instagram-api/reference/ig-comment#delete) — IG 댓글 삭제

해시태그 검색

엔드포인트

해시태그 검색 API는 다음과 같은 노드 및 에지로 구성됩니다.

  • [GET /ig_hashtag_search](https://developers.facebook.com/docs/instagram-api/reference/ig-hashtag-search#reading) — 특정 해시태그의 노드 ID 가져오기
  • [GET /{ig-hashtag-id}](https://developers.facebook.com/docs/instagram-api/reference/ig-hashtag#reading) — 해시태그에 대한 데이터 가져오기
  • [GET /{ig-hashtag-id}/top_media](https://developers.facebook.com/docs/instagram-api/reference/ig-hashtag/top-media#reading) — 특정 해시태그가 있는 가장 인기 있는 사진과 동영상 가져오기
  • [GET /{ig-hashtag-id}/recent_media](https://developers.facebook.com/docs/instagram-api/reference/ig-hashtag/recent-media#reading) — 특정 해시태그가 있는 가장 최근에 게시된 사진과 동영상 가져오기
  • [GET /{ig-user-id}/recently_searched_hashtags](https://developers.facebook.com/docs/instagram-api/reference/ig-user/recently_searched_hashtags) — Instagram 비즈니스 또는 크리에이터 계정이 이번 주에 검색한 고유한 해시태그 확인

인사이트

엔드포인트

API는 다음과 같은 엔드포인트로 구성됩니다.

  • [GET /{ig-media-id}/insights](https://developers.facebook.com/docs/instagram-api/reference/ig-media/insights) — 미디어 개체에 대한 지표 가져오기
  • [GET /{ig-user-id}/insights](https://developers.facebook.com/docs/instagram-api/reference/ig-user/insights) — Instagram 비즈니스 계정 또는 Instagram 크리에이터 계정에 대한 지표 가져오기

언급

엔드포인트

API는 다음과 같은 엔드포인트로 구성됩니다.

  • [GET /{ig-user-id}/tags](https://developers.facebook.com/docs/instagram-api/reference/ig-user/tags) — 비즈니스 또는 크리에이터 계정이 태그된 미디어 개체 가져오기
  • [GET /{ig-user-id}?fields=mentioned_comment](https://developers.facebook.com/docs/instagram-api/reference/ig-user/mentioned_comment#reading) — 비즈니스 또는 크리에이터 계정이 @언급된 댓글에 대한 데이터 가져오기
  • [GET /{ig-user-id}?fields=mentioned_media](https://developers.facebook.com/docs/instagram-api/reference/ig-user/mentioned_media#reading) — 비즈니스 또는 크리에이터 계정이 캡션에 @언급된 미디어 개체에 대한 데이터 가져오기
  • [POST /{ig-user-id}/mentions](https://developers.facebook.com/docs/instagram-api/reference/ig-user/mentions#creating) — 다른 Instagram 사용자가 비즈니스 또는 크리에이터 계정을 @언급한 댓글이나 미디어 개체 캡션에 답글 달기

인스타그램 기본 디스플레이 API

Instagram 기본 디스플레이 API를 사용하면 앱 사용자는 자신의 Instagram 계정에서 기본 프로필 정보, 사진 및 동영상을 가져올 수 있다. 이 API는 모든 유형의 Instagram 계정에 액세스하는 데 사용할 수 있지만 기본 데이터에 대한 읽기 액세스만 제공한다.

액세스 토큰 및 권한 받기

  1. 인증 받기

    매개변수

    • client_id - 앱 대시보드→ 제품→ Instagram→ 기본 디스플레이에 표시된 Instagram 앱 ID이다.
    • redirect_uri - 사용자가 권한 요처을 허용하거나 거부한 후 사용자를 리디렉션하는 url
    • scope - 앱 사용자에게 요청할 권한의 쉼표 또는 url로 인코딩 된 공백으로 구분된 리스트, user_profile은 필수 항목이다
    • response_type - 이 값을 code로 설정
    • state - 각 서버의 상태를 나타내는 값 필수는 아님

    요청

    https://api.instagram.com/oauth/authorize
      ?client_id={instagram-app-id}
      &redirect_uri={redirect-uri}
      &scope={scope}
      &response_type=code
      &state={state}        //Optional

    성공적인 리디렉션 예시

    https://socialsizzle.herokuapp.com/auth/?code=AQBx-hBsH3...#_

  2. 코드를 토큰으로 교환

    매개변수

    • client_id - 앱 대시보드→ 제품→ Instagram→ 기본 디스플레이에 표시된 Instagram 앱 ID이다.
    • client_secret - 앱 대시보드→ 제품→ Instagram→ 기본 디스플레이에 표시된 앱 시크릿 코드이다
    • code - 사용자를 redirect_url 로 리디렉션할 때 code 매개변수로 전달한 인증코드이다
    • grant_type - 이 값을 authorization_code로 설정한다
    • redirect_uri - 사용자가 인증 창으로 이동할때 페이스북에 전달한 리디렉션 uri이다.

    요청 샘플

    curl -X POST \
      https://api.instagram.com/oauth/access_token \
      -F client_id=990602627938098 \
      -F client_secret=eb8c7... \
      -F grant_type=authorization_code \
      -F redirect_uri=https://socialsizzle.herokuapp.com/auth/ \
      -F code=AQBx-hBsH3...

    성공적인 응답 샘플

    응답이 성공하면 API는 앱 사용자의 단기 실행 액세스 토큰과 사용자 ID를 포함한 JSON 페이로드를 반환합니다.

    {
      "access_token": "IGQVJ...",
      "user_id": 17841405793187218
    }

사용자 프로필 및 사용자 미디어 가져오기

사용자 프로필 및 미디어

  1. 액세스 토큰 및 권한 가져오기

  2. 사용자 노드 쿼리

    엔드포인트

    GET /me?fields={fields}&access_token={access-token}

    {fields}는 응답에 포함된 각 미디어에 대해 반환받고자 하는 미디어 필드를 쉼표로 구분하고 또는 ID만 원할 경우 fields매개변수를 완전히 생략한다. 

    요청 예시

    curl -X GET \

    'https://graph.instagram.com/me/media?fields=id,caption&access_token=IGQVJ...'

    응답 예시

    { "data": [ { "id": "17895695668004550", "caption": "" }, { "id": "17899305451014820", "caption": "" }, { "id": "17896450804038745", "caption": "" }, { "id": "17881042411086627", "caption": "" } ], "paging": { "cursors": { "after": "MTAxN...", "before": "NDMyN..." }, "next": "https://graph.faceb..." } }

네이버 밴드

밴드 OPEN API를 활용하기 위해 우선 서비스 등록을 한 뒤 액세스 토큰을 발급 받아야 한다.

  • 외부 홈 페이지에 내가 가입한 밴드 글을 노출시켜 모임의 정보를 한 곳에서 확인한다.
  • 모임 멤버에게 공지 메일을 보내면서 동시에 밴드 게시글로 등록할 수 있다.
  • 나만의 밴드 애플리케이션을 만들어 개인화된 밴드 서비스를 누릴 수 있다.

글 목록 조회

특정 밴드의 글 목록을 조회한다. 글 목록은 최신순으로 정렬되어 제공된다.

요청

url: [GET][https://openapi.band.us/v2/band/posts](https://openapi.band.us/v2/band/posts)

파라미터

nametypemandatorydescription
access_tokenstringY사용자 인증 접근 토큰
band_keystringY밴드 식별자
localestringY국가 및 언어 (ex. en_US)

응답

nametypedescription
result_codeinteger결과 코드 (성공:1)
result_data.pagingobject페이징에 필요한 파라미터 정보
result_data.itemslist글목록

paging

nametypedescription
previous_paramsobject이전 페이징 호출용 파라미터 정보, 현재 제공되지 않습니다.
next_paramsobject다음 페이징 호출용 파라미터 정보

items

nametypedescription
contentstring글 본문 (html 태그가 포함될 경우 이스케이프 처리되어 있습니다.)ex.소환 태그 : <band:refer user_key="abcde">사용자 이름</band:refer>
authorobject작성자 정보
post_keystring글 식별자
comment_countint밴드 식별자
created_atlong글 작성일시
photoslist사진/동영상 정보로, 동영상은 항상 제일 앞에 노출됩니다.
emotion_countint감정 아이콘수
latest_commentslist최근에 글을 남겨진 댓글
band_keystring밴드 식별자
{
    "result_code": 1,
    "result_data": {
        "paging": {
            "previous_params": null,
            "next_params": {
            "after": "AABsFASmeIbSAib8KSzihCBC",
            "limit": "20",
            "band_key": "bandkeyxxxx"
            "access_token": "accsstokenxxxx"
        }
    },
    "items": [{
        "content": "Cotents <band:refer user_no=\"\">Jordan</band:refer>   <band:hashtag>#food</band:hashtag>",
        "post_key": "AABhEEQG08e1Fc227z2fRCwv",
        "created_at": 1444288237000,
        "photos": [{
            "width": 640,
            "height": 480,
            "photo_key": "AAACTLxEYqMx09qji9nzAv1V",
            "photo_album_key": null,
            "author": {
                "name": "Sujan",
                "description": "This is desc.",
                "profile_image_url": "http://band.phinf.campmobile.net/20130719_224/yyyyyy/yyyyy.jpg"
            },
            "url": "http://beta.coresos.phinf.naver.net/a/2g8728_c/28aUd015g6pesvlf89uq_ggxdbs.jpg",
            "comment_count": 1,
            "emotion_count": 1,
            "created_at": 1444295780000,
            "is_video_thumbnail": true
        }, {
            "width": 1280,
            "height": 720,
            "photo_key": "AADtBkdo52blVIcH-4y_AotK",
            "photo_album_key": null,
            "author": {
                "name": "Eddy",
                "description": "This contents is so...",
                "profile_image_url": "http://band.phinf.campmobile.net/20130719_224/xxxxxx/xxxxxx.jpg"
            },
            "url": "http://beta.coresos.phinf.naver.net/a/2g8701_9/ac2Ud01515ftew9215e27_ggxdbs.jpg",
            "comment_count": 1,
            "emotion_count": 1,
            "created_at": 1444288237000,
            "is_video_thumbnail": false
        }],
        "comment_count": 7,
        "author": {
            "name": "Charley Lee",
            "description": "This is a description",
            "profile_image_url": "http://band.phinf.campmobile.net/20130719_224/zzzzzz/zzzzz.jpg"
        }
    }...]
    }
}

글 상세 조회

특정 글의 상세정보를 조회한다.

요청

url: [GET][https://openapi.band.us/v2.1/band/post](https://openapi.band.us/v2.1/band/post)

nametypemandatorydescription
access_tokenstringY사용자 인증 접근 토큰
band_keystringY밴드 식별자
post_keystringY글 식별자

응답

nametypedescription
result_codeinteger결과 코드 (성공:1)
result_data.postobject글 상세정보

post는 위에 item 하나와 동일

{
    "result_code": 1,
    "result_data": {
        "post": {
            "content": "This is Cotents.\n To be continue... <band:attachment type=\"photo\" id=\"3452\" /><band:attachment type=\"video\" id=\"675\" />",
            "video": {
                "175284037": {
                    "height": 360,
                    "width": 640,
                    "is_video_thumbnail": true,
                    "created_at": 1484303791000,
                    "author": {
                        "name": "미니0",
                        "description": "",
                        "role": "member",
                        "profile_image_url": "http://coresos.phinf.naver.net/a/xxxx/xxxxx.png",
                        "user_key": "AACv2efNJhMjHOgGWhfhXg25"
                    },
                    "url": "http://coresos.phinf.naver.net/a/yyyy/yyyy.jpg",
                    "emotion_count": 0,
                    "comment_count": 0,
                    "photo_album_key": null,
                    "photo_key": "AAD7LTDVWfB5GE80Usi_0Y_H"
                }
            },
            "is_multilingual": false,
            "created_at": 1484303791000,
            "author": {
                "name": "Jordan",
                "description": "",
                "role": "member",
                "profile_image_url": "http://coresos.phinf.naver.net/a/yyy/xxx.png",
                "user_key": "AACv2efNJhMjHOgGWhfhXg25"
            },
            "emotion_count": 0,
            "comment_count": 0,
            "post_read_count": 0,
            "post_key": "AAAFJEEalAmkhLXGh0rQCy3h",
            "photo": {
                "5110026620": {
                    "height": 1920,
                    "width": 1440,
                    "is_video_thumbnail": false,
                    "created_at": 1484303791000,
                    "author": {
                        "name": "Charley",
                        "description": "",
                        "role": "member",
                        "profile_image_url": "http://coresos.phinf.naver.net/a/2hj6eg_i/yyyyy.png",
                        "user_key": "AACv2efNJhMjHOgGWhfhXg25"
                    },
                "url": "http://coresos.phinf.naver.net/a/2hjc4i_d/zzzzz.jpg",
                "emotion_count": 0,
                "comment_count": 0,
                "photo_album_key": null,
                "photo_key": "AACVbWOG62mcbDJjaYOkSO2c"
                }
            },
            "shared_count": 0,
            "band_key": "AAAbBbMeQHBLh3-y8xxogqBg"
        }
    }
}

python으로 api 사용하기

import json
from urllib import request
import requests

token = "Access Token"

def get_bands(): #밴드 목록 조회
    url = f'https://openapi.band.us/v2.1/bands?access_token={token}'
    req = request.Request(url)
    res = request.urlopen(req)
    decoded = res.read().decode("utf-8")
    json_dict = json.loads(decoded)
    return json_dict

def create_post(band_key, content, do_push=True): # 게시글 작성하기
    url = f'https://openapi.band.us/v2.1/bands/post/create'
    data = {'access_token' : token, 'band_key' : band_key, 'content' : content, 'do_push' : do_push}
    with requests.post(url, data) as resp:
        json_dict = json.loads(resp.text)
        return json_dict

def get_posts(band_key, locale):  #글 목록 조회
    url = f'https://openapi.band.us/v2/bands/post?access_token={token}&band_key={band_key}&locale={locale}'
    with requests.get(url) as resp:
        json_dict = json.loads(resp.text)
        return json_dict
    
    
def get_spec_posts(band_key, post_key):  #글 상세 조회
    url = f'https://openapi.band.us/v2.1/bands/post?access_token={token}&band_key={band_key}&post_key={post_key}'
    with requests.get(url) as resp:
        json_dict = json.loads(resp.text)
        return json_dict

0개의 댓글