5분 안에 나만의 Instagram 갤러리 만들기
23788 단어 vuejavascript
그러나 Instagram에는 피드에 사진을 표시하는 위젯이 없습니다. 그래서 제가 직접 만들었습니다. 이것은 귀하의 웹 사이트에서도 그렇게 할 수 있는 방법에 대한 게시물입니다. 약간의 리버스 엔지니어링이 필요했지만 결국 모두 작동했고 그대로 유지되기를 바랍니다.🤞
이 게시물은 단일 Instagram 계정에 대해 설명하지만 다른 계정에서도 이미지를 가져오도록 여기에 표시된 내용을 수정할 수 있습니다. 나는 보장하지 않습니다!
사실
쿼리 해시
사진을 표시하려는 Instagram 계정으로 이동하여 개발자 도구를 열고 네트워크 탭을 클릭합니다. 네트워크 탭을 연 상태에서 보고 있는 Instagram 페이지를 새로 고칩니다. 그런 다음 XHR 필터를 클릭합니다. 최신 Firefox 브라우저에서는 다음과 같이 표시됩니다.
XHR만 표시되는 네트워크 탭
Instagram은 GraphQL을 사용하여 게시물을 가져옵니다. 각 게시물에는 다양한 크기의 그림, 통계(좋아요, 댓글 등), 작성자 등의 URL이 포함되어 있습니다. 동일한 API 호출을 직접 만들 수 있도록 요청의 쿼리 해시가 필요합니다.
엔드포인트에 대한 요청에서 쿼리 해시를 찾을 수 있습니다
https://www.instagram.com/graphql/query/
. 다시 한 번 텍스트 상자를 사용하여 요청을 필터링하여 특정 요청을 찾을 수 있습니다.인스타그램 GraphQL API 요청
개발자 도구 창의 전체 URL은 다음과 같습니다.
https://www.instagram.com/graphql/query/?query_hash=d4d88dc1500312af6f937f7b804c68c3&variables={"user_id":"249074882","include_chaining":false,"include_reel":false,"include_suggested_users":false,"include_logged_out_extras":true,"include_highlight_reels":true,"include_live_status":true}
나중을 위해
query_hash
쿼리 매개변수의 값을 저장합니다. 이를 동일한 API 엔드포인트에 대한 자체 요청에 연결합니다.Vue 컴포넌트
다음은 Vue 구성 요소이지만 다른 프런트 엔드 프레임워크에서도 매우 쉽게 동일한 작업을 수행할 수 있습니다.
API 호출에 대한 몇 가지 상수를 선언합니다.
// These two URLs will be the same regardless of the account
// you want to show pictures from.
const IG_API_URL = "https://www.instagram.com/graphql/query/";
const IG_POST_URL = "https://www.instagram.com/p";
// The `query_hash` value from before.
const TIMELINE_QUERY_HASH = "d4d88dc1500312af6f937f7b804c68c3";
// The number of images to fetch per page.
const IMAGES_PER_PAGE = 5;
API 호출하기
async fetchData(after) {
const variables = {"id":"249074882","first":IMAGES_PER_PAGE};
const api = axios.default.create();
const resp = await api.get(IG_API_URL, {
params: {
"query_hash": TIMELINE_QUERY_HASH,
"variables": JSON.stringify(variables)
}
});
return resp.data;
}
표시할 데이터를 변환합니다. 표시하려는 내용에 따라 자유롭게 수정하십시오.
transformData(timeline) {
if (!timeline.hasOwnProperty("edges")) {
return;
}
const edges = timeline.edges;
edges.forEach(edge => {
if (!edge.hasOwnProperty("node") || edge.node["__typename"] !== "GraphImage") {
return;
}
const node = edge.node;
const thumbnails = node["thumbnail_resources"];
const urls = thumbnails.filter(t => t["config_width"] === this.imgProps.w);
let url;
if (!urls || !urls.length) {
url = thumbnails[0].src;
} else {
url = urls[0].src;
}
this.posts.push({
url,
href: `${IG_POST_URL}/${node["shortcode"]}`
});
});
}
}
그리고 그게 다야. 이 몇 줄만으로 인스타그램의 자체 공식 사이트처럼 API 호출을 하고 인스타그램 게시물 페이지를 검색했습니다.
함께 모아서
<template>
<section class="instagram mb-10">
<div class="d-flex flex-row flex-md-row flex-column flex-sm-column justify-center align-center">
<v-card
v-for="(post, index) in posts"
:key="index"
tile
class="pa-2 ma-2"
>
<a
:href="post.href"
class="post"
rel="noopener"
target="_blank"
>
<img
:src="post.url"
width="100%"
height="auto"
>
</a>
</v-card>
</div>
</section>
</template>
<script>
import * as axios from "axios";
const IG_API_URL = "https://www.instagram.com/graphql/query/";
const IG_POST_URL = "https://www.instagram.com/p";
const TIMELINE_QUERY_HASH = "9dcf6e1a98bc7f6e92953d5a61027b98";
const IMAGES_PER_PAGE = 5;
export default {
name: "Instagram",
data() {
return {
posts: [],
imgProps: {
w: 320,
h: 320
}
};
},
async created() {
const resp = await this.fetchData();
if (!resp.data.hasOwnProperty("user") || !resp.data.user.hasOwnProperty("edge_owner_to_timeline_media")) {
return;
}
this.transformData(resp.data.user.edge_owner_to_timeline_media);
},
methods: {
async fetchData() {
const variables = {"id":"20214540375","first":IMAGES_PER_PAGE};
const api = axios.default.create();
const resp = await api.get(IG_API_URL, {
params: {
"query_hash": TIMELINE_QUERY_HASH,
"variables": JSON.stringify(variables)
}
});
return resp.data;
},
transformData(timeline) {
if (!timeline.hasOwnProperty("edges")) {
return;
}
const edges = timeline.edges;
edges.forEach(edge => {
if (!edge.hasOwnProperty("node") || edge.node["__typename"] !== "GraphImage") {
return;
}
const node = edge.node;
const thumbnails = node["thumbnail_resources"];
const urls = thumbnails.filter(t => t["config_width"] === this.imgProps.w);
let url;
if (!urls || !urls.length) {
url = thumbnails[0].src;
} else {
url = urls[0].src;
}
this.posts.push({
url,
href: `${IG_POST_URL}/${node["shortcode"]}`
});
});
}
}
}
</script>
<style lang="scss" scoped>
.instagram {
overflow: hidden;
}
@media all and (max-width: 640px) {
.instagram {
.ig-container {
.columns {
display: flex;
justify-content: center;
}
}
}
}
</style>
지금은 그게 다입니다. 이 게시물이 마음에 들고 다른 것에 대해 쓰고 싶다면 알려주세요! 다음에 또 만나요! 👋
Reference
이 문제에 관하여(5분 안에 나만의 Instagram 갤러리 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/praneetloke/roll-your-own-instagram-gallery-in-5-mins-3fjf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)