Git Product home page Git Product logo

pixiv_dart's Introduction

pixiv.dart

pixivAPIをDart/Flutterで利用するためのパッケージです。

Features

TODO: List what your package can do. Maybe include images, gifs, or videos.

Getting started

Install

このパッケージは開発中であり、長期的なサポートを想定していないため、pub.devでは公開していません。そのため、パッケージを使用するためにはpubspec.yamldependenciesに以下の記述を追加する必要があります。

dependencies:
  pixiv_dart:
    git:
      url: https://github.com/MnyaCat/pixiv_dart
      ref: # バージョンを固定するコミットのハッシュ値を書いてください(例: 0ff847f)。

Retrieving Auth Token

pixivへログインするためには、OAuth認証のアクセストークンを取得する必要があります。
以下の手順に従って、アクセストークンを取得してください。

  1. oauth_flow.dartを実行します。
  2. 表示されたリンクをブラウザで開きます。
  3. DevToolsを開き(Google Chromeの場合はF12)、"Network(ネットワーク)"タブに移動します。
  4. "Preserve log(ログを保持)"を有効にし、"Filter"にcallback?を入力します。
  5. pixivへログインしてください。
  6. ログインすると、https://app-api.pixiv.net/web/v1/users/auth/pixiv/callback?state=...&code=...のようなリクエストが表示されます。codeパラメーターの値をコピーして、コンソールにペーストし、Enterを押してください。

アクセストークンの取得に成功すると、コンソールへ取得したトークンが出力されます。
アカウント情報をファイルに保存する場合は、引数--save-accountを付けて実行してください。カレントディレクトリ配下のuser_account.jsonに出力されます。
ここで取得したトークンを利用することで、アカウントにログインできます。誤ってインターネット上にアップロードしないように気をつけてください。

Usage

import 'package:http/http.dart' show Client;
import 'package:pixiv_dart/pixiv_dart.dart';

void main() async {
  final api =
      await ApiClient.loginWithRefreshToken('your refresh token', Client());

  // fetch illust detail
  final illust = await api.fetchIllustDetail(92210213);
  print('title: ${illust.title}');
}

LICENSE

Copyright (c) 2023 MnyaCat
Released under the MIT license
see LICENSE file

pixiv_dart's People

Contributors

mnyacat avatar

Stargazers

 avatar

Watchers

 avatar

pixiv_dart's Issues

テストコードをmockitoを使うように変更

概要

現在、ApiClientのテストは実際にAPIへアクセスしているが、MockClientに変更する。

理由など

  • 様々なシナリオでテストできる(エラーを発生させるなど)
  • pixivから制限されないように

コードが重複している部分を減らす

1. ヘッダーの取得、GETメソッド、JsonMapへのパース

final header = await getRefreshedHeader();
final response = await innerClient.get(url, headers: header);
final jsonResponse = parse(response);

この部分が重複している。プライベート関数を作って、そこにまとめる。

next_urlに対応させる

v1/illust/rankingv1/illust/recommendedなどはレスポンスに以降のイラストを取得するためのnext_urlが含まれる。
メソッドの引数でnext_urlを受け取れるようにして、next_urlが渡された時はそれを使って取得するようにする。

Before

Future<Illusts> fetchIllustRanking({
  IllustRankingMode? mode,
  int? offset,
  DateTime? date,
}) async {
  final body = <String, String?>{
    'mode': mode?.toSnakeCaseString(),
    'offset': offset?.toString(),
    'date': date?.toDateString()
  }..removeWhere((key, value) => value == null);
  print(body);
  final url = Uri.https(apiHostname, '/v1/illust/ranking', body);
  final header = await getRefreshedHeader();
  final response = await innerClient.get(url, headers: header);
  final jsonResponse = parse(response);
  return Illusts.fromJson(jsonResponse);
}

After

Future<Illusts> fetchIllustRanking({
  IllustRankingMode? mode,
  int? offset,
  DateTime? date,
  // 引数でnext_urlを受け取る
  String? nextUrl
}) async {
  final Uri url;
  // next_urlが渡されたかで分岐
  if (next_url == null) {
    final body = <String, String?>{
      'mode': mode?.toSnakeCaseString(),
      'offset': offset?.toString(),
      'date': date?.toDateString()
    }..removeWhere((key, value) => value == null);
    url = Uri.https(apiHostname, '/v1/illust/ranking', body);
  } else {
    // 渡されている時はURLをパース
    url = Uri.parse(nextUrl);
  }
  final header = await getRefreshedHeader();
  final response = await innerClient.get(url, headers: header);
  final jsonResponse = parse(response);
  return Illusts.fromJson(jsonResponse);
}

ApiClientのテストを追加

ApiClient

Illust API

  • addIllustBookmark
  • deleteIllustBookmark
  • fetchIllustBookmarkDetail
  • fetchIllustDetail
  • fetchIllustRanking
  • fetchLatestIllustByFollowing
  • fetchLatestIllustByMyPixiv
  • fetchLatestIllusts
  • fetchRecommendedIllusts
  • fetchRelatedIllust

Manga API

  • fetchRecommendedManga

Novel API

  • addNovelBookmark
  • deleteNovelBookmark
  • fetchNovelBookmarkDetail
  • fetchNovelDetail
  • fetchLatestNovels
  • fetchLatestNovelsByFollowing
  • fetchLatestNovelsByMyPixiv
  • fetchNovelRanking
  • fetchRecommendedNovels
  • fetchRelatedNovels

Serch API

  • searchIllust
  • searchNovel
  • searchUser

Ugoira API

  • fetchUgoiraMetadata

User API

  • addFollow
  • deleteFollow
  • fetchRecommendedUsers
  • fetchRelatedUsers
  • fetchUserDetail
  • fetchUserFollowing
  • fetchUserIllusts
  • fetchUserIllustBookmarks
  • fetchUserIllustBookmarksByNextUrl
  • fetchUserNovels
  • fetchUserNovelBookmarks
  • fetchUserNovelBookmarksByNextUrl

Download API

  • downloadIllustData

サポートするAPIを増やす

以下のAPIを追加。

  • illust

    • v2/illust/follow
    • v2/illust/mypixiv
    • v1/illust/new
    • v1/illust/ranking
    • v1/illust/recommended
    • v2/illust/related
  • novel

    • v1/novel/follow
    • v1/novel/mypixiv
    • v1/novel/new
    • v1/novel/ranking
    • v1/novel/recommended
    • v1/novel/related
  • search

    • v1/search/illust
    • v1/search/novel
    • v1/search/user
  • user

    • v1/user/follow/add
    • v1/user/follow/delete
    • v1/user/following
    • v1/user/illusts
    • v1/user/novels
    • v1/user/recommended
    • v1/user/related
  • v1/manga/recommended

  • v1/ugoira/metadata

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.