Flutter Instagram公共API访问插件insta_public_api的使用

Flutter Instagram公共API访问插件insta_public_api的使用

通过输入用户名获取Instagram公共账户的详细信息。

// 导入包
import 'package:insta_public_api/insta_public_api.dart';

// 使用用户名初始化(必须是公开的)
final ipa = InstaPublicApi('username');

// 获取基本信息,如全名、关注者、正在关注的人等
final info = await ipa.getBasicInfo();

print('帖子数量: ${info.noOfPosts}');
print('关注者数量: ${info.followers}');
print('正在关注的人数: ${info.following}');

/*
  基本信息包含:
    是否私密,
    是否已验证,
    头像,
    关注者,
    正在关注的人数,
    全名,
    帖子数量,
    简介等。
*/

// 获取前12个帖子的列表,包括嵌套的图片和详情,例如点赞数、评论数、标题等。
final timelinePosts = await ipa.getTimelinePosts();

// 获取用户资料上的所有帖子列表(默认限制为100,可以修改)
final posts = await ipa.getAllPosts();

/*
  每个帖子包含:
    嵌套的图片,
    评论数量,
    点赞数量,
    标题等。
*/

示例应用

当前可用的方法

  • String getProfilePic() 返回头像的图片URL。
  • BasicInfo getBasicInfo() 返回全名、关注者数量、正在关注的人数等。
  • List<String> getTimelinePostsImages() 返回前12个帖子的图片URL列表。
  • List<Post> getTimelinePosts() 返回包含嵌套图片和详情的第一个12个帖子。详情包括点赞数、评论数、标题等。
  • List<Post> getAllPosts() 返回用户资料上的所有帖子列表(默认限制为100,可以修改)。

示例代码

import 'package:flutter/material.dart';

import 'package:insta_public_api/insta_public_api.dart';
import 'package:insta_public_api/models/basic_model.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  /// 使用您的用户名初始化
  final ipa = InstaPublicApi('flutter_coders', postsLimit: 105);

  /// 辅助函数
  Widget makeText(String text) => Padding(
        padding: const EdgeInsets.all(8.0),
        child: Text(
          text,
          textAlign: TextAlign.center,
          style: TextStyle(fontWeight: FontWeight.bold),
        ),
      );

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          title: const Text('示例应用'),
        ),
        body: FutureBuilder(
          /// 获取所有帖子的URL
          future: ipa.getAllPosts(),
          builder: (BuildContext context, AsyncSnapshot<List<Post>> snapshot) {
            /// 等待数据加载
            if (!snapshot.hasData)
              return Center(child: CircularProgressIndicator());

            /// 帖子列表
            List<Post> posts = snapshot.data;

            return ListView(children: [
              SizedBox(height: 20),
              FutureBuilder(
                future: ipa.getBasicInfo(),
                builder: (BuildContext context, AsyncSnapshot<BasicInfo> snapshot) {
                  final info = snapshot.data;
                  if (!snapshot.hasData)
                    return Center(child: CircularProgressIndicator());

                  return Column(
                    children: [
                      makeText('${info.fullName}'),
                      SizedBox(height: 10),
                      Row(
                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                        children: [
                          ClipRRect(
                              borderRadius: BorderRadius.circular(50),
                              child: Image.network(info.profilePic, height: 100)),
                          makeText('帖子\n${info.noOfPosts}'),
                          makeText('关注者\n${info.followers}'),
                          makeText('正在关注的人数\n${info.following}'),
                        ],
                      ),
                    ],
                  );
                },
              ),
              ...posts
                  .map(
                    (p) => Column(
                      children: [
                        Container(
                          padding: EdgeInsets.all(10),
                          child: Container(
                            height: 450,
                            padding: EdgeInsets.symmetric(vertical: 10),
                            child: ListView(
                                scrollDirection: Axis.horizontal,
                                children: p.hasNestedImages
                                    ? [
                                        ...p.images
                                            .map(
                                              (i) => Container(
                                                padding: EdgeInsets.symmetric(
                                                    vertical: 10),
                                                child: ClipRRect(
                                                  child: Image.network(
                                                    i.displayUrl,
                                                    fit: BoxFit.cover,
                                                  ),
                                                  borderRadius: p.images.first == i
                                                      ? BorderRadius.only(
                                                          topLeft: Radius.circular(
                                                              10),
                                                          bottomLeft:
                                                              Radius.circular(
                                                                  10),
                                                        )
                                                      : p.images.last == i
                                                          ? BorderRadius.only(
                                                              topRight:
                                                                  Radius.circular(
                                                                      10),
                                                              bottomRight:
                                                                  Radius.circular(
                                                                      10),
                                                            )
                                                          : BorderRadius.all(
                                                              Radius.zero),
                                                ),
                                              ),
                                            )
                                            .toList()
                                      ]
                                    : [
                                        ClipRRect(
                                            child: Image.network(p.displayUrl,
                                                fit: BoxFit.cover),
                                            borderRadius:
                                                BorderRadius.circular(10)),
                                      ]),
                          ),
                        ),
                        Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: [
                            Icon(
                              Icons.favorite_border_rounded,
                              color: Colors.red,
                            ),
                            makeText(' ${p.likes}'),
                            SizedBox(width: 10),
                            Icon(
                              Icons.comment,
                              color: Colors.blue,
                            ),
                            makeText(' ${p.comments}'),
                          ],
                        ),
                        SizedBox(height: 20),
                        makeText('${p.caption}')
                      ],
                    ),
                  )
                  .toList()
            ]);
          },
        ),
      ),
    );
  }
}

更多关于Flutter Instagram公共API访问插件insta_public_api的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Instagram公共API访问插件insta_public_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于在Flutter中使用insta_public_api插件来访问Instagram公共API,下面是一个示例代码案例,展示了如何集成并使用该插件来获取Instagram上的用户信息。

首先,确保你已经在pubspec.yaml文件中添加了insta_public_api依赖:

dependencies:
  flutter:
    sdk: flutter
  insta_public_api: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用insta_public_api

  1. 导入依赖
import 'package:flutter/material.dart';
import 'package:insta_public_api/insta_public_api.dart';
  1. 配置API客户端

在你的应用初始化时,配置Instagram公共API客户端。通常,这会在main.dart或类似的入口文件中完成。

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Instagram API Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: InstagramUserPage(),
    );
  }
}
  1. 创建API服务并获取用户数据

在你的页面或组件中,使用insta_public_api来获取Instagram用户数据。例如,获取特定用户的信息:

class InstagramUserPage extends StatefulWidget {
  @override
  _InstagramUserPageState createState() => _InstagramUserPageState();
}

class _InstagramUserPageState extends State<InstagramUserPage> {
  InstagramUser? user;
  final InstagramPublicApiClient apiClient = InstagramPublicApiClient();

  @override
  void initState() {
    super.initState();
    _fetchUserData('instagram用户名');  // 替换为实际的Instagram用户名
  }

  Future<void> _fetchUserData(String username) async {
    try {
      final userResponse = await apiClient.getUserByUsername(username);
      setState(() {
        user = userResponse;
      });
    } catch (e) {
      print('Error fetching user data: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Instagram User Info'),
      ),
      body: Center(
        child: user == null
            ? CircularProgressIndicator()
            : Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text('Username: ${user!.username!}'),
                  Text('Full Name: ${user!.fullName!}'),
                  Text('Profile Picture URL: ${user!.profilePictureUrl!}'),
                  // 可以根据需要添加更多用户信息的显示
                ],
              ),
      ),
    );
  }
}

在这个示例中,InstagramPublicApiClient是用来与Instagram公共API进行交互的客户端。getUserByUsername方法用于根据用户名获取用户信息。在_fetchUserData方法中,我们调用这个API并将结果存储在user变量中。然后,在build方法中,我们根据user变量是否为空来显示加载指示器或用户信息。

请注意,这个示例假设insta_public_api插件提供了一个名为InstagramPublicApiClient的类和一个getUserByUsername的方法。实际使用时,你可能需要参考该插件的官方文档来调整代码。

此外,由于Instagram的API可能会变更,且使用第三方API访问Instagram数据可能受到Instagram的使用条款和条件的限制,因此请确保你遵守所有相关的法律和规定。

回到顶部