Skip to content

Huanying04/jixiv

Repository files navigation

Maven Central

jixiv

用來實現pixiv爬蟲等的Java函式庫

功能

  • 獲取插畫/漫畫資訊
  • 獲取小說資訊
  • 喜歡作品
  • 添加/取消收藏作品
  • 下載插畫
  • 下載動圖(zip 內含動圖所有影格)
  • 下載漫畫
  • 下載畫師所有作品
  • 下載小說封面
  • 獲取小說內容
  • 排行榜
  • 搜尋
  • 獲取已關注用戶的最新作品
  • 獲取用戶收藏
  • 設定作品瀏覽限制
  • etc.

配置方法

Maven

<dependencies>
  <dependency>
    <groupId>com.github.huanying04.utils</groupId>
    <artifactId>jixiv</artifactId>
    <version>VERSION</version>
  </dependency>
</dependencies>

Gradle

dependencies {
    implementation 'com.github.huanying04.utils:jixiv:VERSION'
}

使用方法

Doc:https://huanying04.github.io/jixiv/

PHPSESSID

由於pixiv防爬蟲防得很嚴或是我的程式能力很弱,目前做不出帳號密碼模擬登入。可暫時藉由PHPSESSID來模擬登入。

phpsession

在瀏覽器中找到pixiv cookie中的PHPSESSID即可用之來模擬登入。

模擬登入(必要!)

String phpSession = "00000000_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; //pixiv登入後cookie裡的PHPSESSID
String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36";  //你的User-Agent

Jixiv.loginByCookie(phpSession);
Jixiv.setUserAgent(userAgent);

獲取插畫/漫畫資訊

int id = 85209753; //插畫id
IllustrationInfo iInfo = Illustration.getInfo(id);  //注意這個Illustration是net.nekomura.utils.jixiv.artworks裡的
//獲取插畫標題
String title = iInfo.getTitle();
//獲取插畫簡介
String description = iInfo.getRawDescription();
//獲取插畫所有標籤名字
String[] tags = iInfo.getTags();
//獲取插畫頁數
int pageCount = iInfo.getPageCount();
//獲取觀看次數
int viewCount = iInfo.getViewCount();
//獲取收藏次數
int bookmarkCount = iInfo.getBookmarkCount();
//獲取讚數
int likeCount = iInfo.getLikeCount();
//獲取評論數
int commemtCount = iInfo.getCommentCount();

獲取小說資訊

int id = 11387000; //小說id
NovelInfo nInfo = Novel.getInfo(id);  //注意這個Novel是net.nekomura.utils.jixiv.artworks裡的
//獲取小說標題
String title = nInfo.getTitle();
//獲取小說簡介
String description = nInfo.getRawDescription();
//獲取小說所有標籤名字
String[] tags = nInfo.getTags();
//獲取頁數
int pageCount = nInfo.getPageCount();
//獲取總字數
int textCount = nInfo.getTextCount();
//獲取觀看次數
int viewCount = nInfo.getViewCount();
//獲取收藏次數
int bookmarkCount = nInfo.getBookmarkCount();
//獲取讚數
int likeCount = nInfo.getLikeCount();
//獲取評論數
int commemtCount = nInfo.getCommentCount();

喜歡作品

int illustId = 66715075;
Illustration.like(illustId);  //喜歡id為66715075的插畫

int novelId = 14488459;
Novel.like(novelId);  //喜歡id為14488459的小說

收藏作品

int illustId = 87143893;
Illustration.addBookmark(illustId);  //收藏id為87143893的插畫
        
int novelId = 14488459;
Novel.addBookmark(novelId);  //收藏id為14488459的小說

取消收藏作品

int illustId = 87143893;
Illustration.removeBookmark(illustId);  //取消收藏id為87143893的插畫
        
int novelId = 14488459;
Novel.removeBookmark(novelId);  //取消收藏id為14488459的小說

評論

Illustration.comment(87135236, "かわいい");  //在id為87135236的插畫底下評論"かわいい"
Illustration.comment(87148546, "しゅき" + Emoji.HEART);  //也可以使用pixiv的emoji留言
Illustration.comment(87013815, Emoji.HEART.toString());  //如果只有評論單個emoji的話要使用toString()方法
Illustration.comment(84522989, Stamp.STAMP_205); //或者也可以使用表情貼圖評論

//小說同理,只不過要使用Novel類的靜態方法
//Novel.comment(......);

獲取評論

Comments cs1 = Illustration.getComments(85786994, 0, 3);  //獲取id為85786994的插畫最新的3個評論
Comments cs2 = Illustration.getComments(85786994, 3, 50);  //獲取id為85786994的插畫除了最新的3個,最新的50個評論(可能不達50,如果評論數沒那麼多的話)
Comments cs = Illustration.getComments(85786994);  //或者不指定個數直接獲取所有評論
Comment c = cs.getComment(0);  //獲取最新一個評論的評論物件
c.getComment();  //獲取評論內容

//小說同理
//Comments cs3 = Novel.getComments(......);

下載插畫/漫畫

指定頁數

完整版

可以指定第幾頁及插畫大小。

String path = "";  //儲存位置
int id = 86067804;  //插畫id
int page = 0;  //頁碼
PixivImageSize size = PixivImageSize.Original;  //圖片大小
IllustrationInfo iInfo = Illustration.get(id);
iInfo.download(path, page, size);  //將id為85209753的插畫的第0頁下載到path

簡易版

只需id就足以完成

String path = "";  //儲存位置
int id = 87148677;  //插畫id
IllustrationInfo iInfo = Illustration.get(id);
iInfo.download(path);  //將id為85209753的插畫的第0頁下載到path

所有頁數

String path = "";  //資料夾位置
int id = 85207001;  //插畫id
IllustrationInfo iInfo = Illustration.get(id);
iInfo.downloadAll(path, PixivImageSize.Original);  //將id中的所有插畫都下載到path裡

下載使用者所有插畫

String path = "";  //資料夾位置
int userId = 5445450;  //使用者id
PixivImageSize size = PixivImageSize.Original;  //圖片大小
Pixiv.downloadUserAllIllustration(path, userId, size);  //將使用者id中的所有插畫及漫畫都下載到path裡

下載動圖(zip)

String path = "";  //資料夾位置
int id = 44298467;  //插畫id
IllustrationInfo iInfo = Illustration.getInfo(id);
iInfo.downloadUgoiraZip(path);

獲取小說內容

int id = 11387000; //小說id
NovelInfo nInfo = Novel.getInfo(id);
String content = nInfo.getContent();  //小說內容

下載小說封面

String path = "";  //儲存位置
int id = 11387000; //小說id
NovelInfo nInfo = Novel.getInfo(id);
n.downloadCover(path);

作品是否為R-18或R-18G

如果要判斷作品為成人限制作品,可使用下面方法判斷。

ArtworkInfo.isNSFW();

範例:

IllustrationInfo iInfo = Illustration.get(id);
PixivNovelInfo nInfo = Novel.get(id);

iInfo.isNSFW(id);  //作品(插畫或漫畫)id是否為成人限制
nInfo.isNSFW(id);  //作品(小說)id是否為成人限制

如果只要判斷R-18或R-18G則為

ArtworkInfo.isR18();  //作品id是否為R-18
ArtworkInfo.isR18G();  //作品id是否為R-18-G

排行榜

可使用下面的方式獲取今日綜合排行榜

int page = 1;  //頁碼
Rank rank = Pixiv.rank(page);

或是使用下列方法獲取指定排行榜

int page = 1;  //頁碼
PixivRankMode mode = PixivRankMode.Daily;  //排行榜類別
PixivRankContent content = PixivRankContent.Illust;  //作品形式
String date = "20201001";  //日期
Rank rank = Pixiv.rank(page, mode, content, date);

搜尋

可使用下面方法關鍵字搜尋插畫。

String keyword = "";  //關鍵字
int page = 1;  //頁碼
SearchResult result = Pixiv.search(keyword, page);

或是使用下面方法搜尋。

String keyword = "";  //關鍵字
int page = 1;  //頁碼
PixivSearchArtworkType artworkType = PixivSearchArtworkType.Illustrations;  //搜尋作品類別
PixivSearchOrder order = PixivSearchOrder.NEW_TO_OLD;  //排序方式
PixivSearchMode mode = PixivSearchMode.ALL;  //搜尋作品年齡分類
PixivSearchSMode sMode = PixivSearchSMode.S_TAG;  //關鍵字搜尋方式
PixivSearchType type = PixivSearchType.Illust;  //搜尋作品類別
SearchResult result = Pixiv.search(keyword, page, artworkType, order, mode, sMode, type);

示例