Инстаграм в Экспо / реагируют родные - PullRequest
1 голос
/ 09 января 2020

Я пытаюсь создать страницу в своем приложении, где мы можем видеть разные фотографии, которые я публикую в аккаунте Instagram приложения. У меня есть токен доступа и идентификатор пользователя, и я пытаюсь использовать следующий код, но получаю пустую страницу и ошибку:

[Отклонение необработанного обещания: SyntaxError: JSON Ошибка разбора: нераспознанный токен '<'] </p>

Я все еще застрял в той же ошибке и не могу найти причину.

 import React, { Component } from "react";
import {
  Text,
  View,
  StyleSheet,
  Image,
  Dimensions,
  FlatList
} from "react-native";
import { Constants, AppLoading } from "expo";

export default class Instagram extends Component {
  access_token ="IGQVJVdDF1RUg1SG9V...";
  user_id = "17841...";

  state = {
    loaded: false,
    data: null,
    comments: []
  };

  componentDidMount() {
    this.fetchFeed();
  }

  async fetchFeed() {
    let response = await fetch(
      "https://api.instagram.com/v1/users/" +
        this.user_id +
        "/media/recent/?access_token=" +
        this.access_token
    );
    let posts = await response.json();
    let comments = await this.makeCommentsList(posts.data);

    this.setState({
      data: posts.data,
      comments: comments,
      loaded: true
    });
  }

  createPost(postInfo, index) {
    let imageUri = postInfo.images.standard_resolution.url;
    let username = postInfo.user.username;
    let numLikes = postInfo.likes.count;

    return (
      <View>
        <Image style={styles.image} source={{ uri: imageUri }} />
        <View style={styles.info}>
          <Text style={styles.infoText}>{username}</Text>
          <Text style={styles.infoText}>
            {numLikes + (numLikes !== 1 ? " likes" : " like")}
          </Text>
        </View>
        <View>{this.state.comments[index]}</View>
      </View>
    );
  }

  async makeCommentsList(posts) {
    let postsArray = posts.map(async post => {
      let postId = post.id;

      if (post.comments.count === 0) {
        return (
          <View style={styles.comment} key={postId}>
            <Text>No Comments!</Text>
          </View>
        );
      } else {
        let response = await fetch(
          "https://api.instagram.com/v1/media/" +
            postId +
            "/comments?access_token=" +
            this.access_token
        );
        let comments = await response.json();
        let commentsArray = comments.data;
        // console.log(commentsArray)
        let commentsList = commentsArray.map(commentInfo => {
          return (
            <View style={styles.comment} key={commentInfo.id}>
              <Text style={styles.commentText}>
                {commentInfo.from.username}
              </Text>
              <Text>{commentInfo.text}</Text>
            </View>
          );
        });
        return commentsList;
      }
    });

    postsArray = await Promise.all(postsArray);
    return postsArray;
  }

  render() {
    if (!this.state.loaded) {
      return <AppLoading />;
    }
    return (
      <View style={styles.container}>
        <FlatList
          data={this.state.data}
          renderItem={({ item, index }) => this.createPost(item, index)}
          keyExtractor={item => item.id}
        />
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: "center",
    // paddingTop: Constants.statusBarHeight,
    backgroundColor: "#ecf0f1"
  },
  image: {
    width: Dimensions.get("window").width,
    height: Dimensions.get("window").width
  },
  info: {
    flexDirection: "row",
    justifyContent: "space-between",
    padding: 10,
    paddingLeft: 15,
    paddingRight: 15,
    borderBottomWidth: 1,
    borderColor: "#d8d8d8"
  },
  infoText: {
    fontSize: 16,
    fontWeight: "bold"
  },
  comment: {
    flexDirection: "row",
    padding: 10,
    paddingLeft: 15,
    borderBottomWidth: 1,
    borderColor: "#d8d8d8"
  },
  commentText: {
    paddingRight: 15,
    fontWeight: "bold"
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...