Giter Site home page Giter Site logo

niconico-tools's Introduction

Build Status Coverage Status PyPI version

Here is a description page written in Japanese. Not able to read? -> Read Me (English)

nicotools

a niconico oriented tool.

Features

ニコニコ動画の動画やコメントやサムネイル画像をダウンロードできる Python 製のコマンドラインツールです。 それだけでなく、マイリストの操作もシンプルな書き方でできるように作ってあります。

できること:

  • サムネイル

    • 小さいほう (130x100) も大きいほう (360x270) も(古いのは小のみ)。
  • コメント

    • XML 形式でも JSON でも(古いのはXMLのみ)。
  • 動画

    • "smile" サーバー (従来サーバー) でも "dmc.nico" サーバー (いわゆる新サーバー、2016年以降の動画).
  • 動画の 分割同時ダウンロード

    • デフォルトで4分割。分割数に制限なし。
  • マイリストの新規作成・削除

  • マイリストに動画を追加・削除・移動・コピー

How It Works

how it works

Installation

pip install nicotools

Requirements

  • Python >= 3.6

Usage

引数なしで実行するとヘルプを表示します。

>nicotools
usage: nicotools [-h] [-l MAIL] [-p PASSWORD] [-w]
                 [--loglevel {DEBUG,INFO,WARNING,ERROR,CRITICAL}]
                 {download,d,mylist,m} ...

nicotools downlaod --help または nicotools mylist --help
で各コマンドのヘルプを表示します。

positional arguments:
  {download,d,mylist,m}
    download (d)        動画のいろいろをダウンロードします。
    mylist (m)          マイリストを扱います。 add, delete, move, copy
                        の引数にはテキストファイルも指定できます。
                        その場合はファイル名の先頭に "+" をつけます。 例:+"C:/ids.txt"

optional arguments:
  -h, --help            show this help message and exit
  -l MAIL, --mail MAIL  メールアドレス
  -p PASSWORD, --pass PASSWORD
                        パスワード
  -w, --what            コマンドの確認用。 引数の内容を書き出すだけです。
  --loglevel {DEBUG,INFO,WARNING,ERROR,CRITICAL}
                        ログ出力の詳細さ。 デフォルトは INFO です。
>nicotools mylist --help
usage: nicotools mylist [-h] [--loglevel {DEBUG,INFO,WARNING,ERROR,CRITICAL}]
                        [-w] [-l MAIL] [-p WORD] [-i] [-o FILE] [--yes]
                        [--each] [-t To] [-a sm... [sm... ...]]
                        [-d sm... [sm... ...]] [-m sm... [sm... ...]]
                        [-c sm... [sm... ...]] [-r] [--purge] [-s] [-e]
                        [--everything]
                        マイリスト名

positional arguments:
  マイリスト名          移動(コピー)元、 あるいは各種の操作対象の、マイリストの名前

optional arguments:
  -h, --help            show this help message and exit
  --loglevel {DEBUG,INFO,WARNING,ERROR,CRITICAL}
                        ログ出力の詳細さ。 デフォルトは INFO です。
  -w, --what            コマンドの確認用。 引数の内容を書き出すだけです。
  -l MAIL, --mail MAIL  メールアドレス
  -p WORD, --pass WORD  パスワード
  -i, --id              マイリストの指定に、 名前の代わりにそのIDを使います。
  -o FILE, --out FILE   そのファイル名で テキストファイルに出力します。
  --yes                 これを指定すると、マイリスト自体の削除やマイリスト内の
                        全項目の削除の時に確認しません。
  --each                指定すると、登録や削除を、まとめずに一つずつ行います。

リスト中の項目を操作する:
  -t To, --to To        移動(コピー)先のマイリストの名前
  -a sm... [sm... ...], --add sm... [sm... ...]
                        指定したIDの動画を マイリストに追加します。
  -d sm... [sm... ...], --delete sm... [sm... ...]
                        そのマイリストから 指定したIDの動画を削除します。
                        動画IDの代わりに * を指定すると、マイリストを空にします。
  -m sm... [sm... ...], --move sm... [sm... ...]
                        移動元から移動先へと 動画を移動します。
  -c sm... [sm... ...], --copy sm... [sm... ...]
                        コピー元からコピー先へと 動画をコピーします。
                        動画IDの代わりに * を指定すると、マイリスト全体をコピーします。

マイリスト自体を操作する:
  -r, --create          指定した名前で 新しくマイリストを作成します。
  --purge               そのマイリスト自体を削除します。 取り消しはできません。
  -s, --show            登録された動画の情報をタブ区切り形式で出力します。
                        名前の代わりに * を指定するとマイリスト全体のメタデータを
                        出力します。-ss のように2回指定すると表形式で表示します。
  -e, --export          登録された動画IDのみを改行で区切り、出力します。
                        名前の代わりに * を指定すると全マイリストを一覧にします。
  --everything          show や export と同時に指定すると、全てのマイリストの
                        情報をまとめて取得します。
>nicotools download --help
usage: nicotools download [-h]
                          [--loglevel {DEBUG,INFO,WARNING,ERROR,CRITICAL}]
                          [-w] [-l MAIL] [-p WORD] [-d DEST] [-c] [-v] [-t]
                          [-x] [-o FILE] [--smile] [--dmc]
                          [--limit LIMIT] [--nomulti]
                          VIDEO_ID [VIDEO_ID ...]
   
   positional arguments:
     VIDEO_ID              ダウンロードしたい動画ID。 例: sm12345678
                           テキストファイルも指定できます。その場合はファイル名の
                           先頭に "+" をつけます。 例: +"C:/ids.txt"
   
   optional arguments:
     -h, --help            show this help message and exit
     --loglevel {DEBUG,INFO,WARNING,ERROR,CRITICAL}
                           ログ出力の詳細さ。 デフォルトは INFO です。
     -w, --what            コマンドの確認用。 引数の内容を書き出すだけです。
     -l MAIL, --mail MAIL  メールアドレス
     -p WORD, --pass WORD  パスワード
     -d DEST, --dest DEST  ダウンロードしたものを保存する フォルダーへのパス。
     -c, --comment         指定すると、 コメントをダウンロードします。
     -v, --video           指定すると、 動画をダウンロードします。
     -t, --thumbnail       指定すると、 サムネイルをダウンロードします。
     -x, --xml             指定すると、コメントをXML形式でダウンロードします。
                           チャンネル動画の場合は無視されます。
     -o FILE, --out FILE   --getthumbinfo の結果をそのファイル名で テキストファイルに出力します。
     --smile               動画をsmileサーバー(いわゆる従来サーバー)からダウンロードします。
     --dmc                 動画をDMCサーバー(いわゆる新サーバー)からダウンロードします。標準はこちらです。
     --limit LIMIT         サムネイルとコメントについては同時ダウンロードを、
                           動画については1つあたりの分割数をこの数に制限します。標準は 4 です。
     --nomulti             指定すると、プログレスバーを複数行で表示しません。

Usage as a CLI tool

最初に起動したときはメールアドレスとパスワードを聞かれるので入力してください。次回以降は、クッキーが保存されますので入力は要りません。 コマンドで明示的に指定できます。

nicotools download -v sm9 --mail "[email protected]" --pass "password"

Downloading

  • sm1, ... sm5 のサムネイル:

    nicotools downlaod --thumbnail --dest "./Downloads" sm1 sm2 sm3 sm4 sm5

  • それらのサムネイル・コメント・動画:

    nicotools download --comment --video --thumbnail --dest "./Downloads" sm1 sm2 sm3 sm4 sm5

  • 動画IDを一行ごとに書いたテキストファイルを読み込ませてダウンロード (ファイル名の前に "+" をつける):

    nicotools download -cvt -d "./Downloads" +ids.txt

  • XML 形式のコメント (デフォルトではJSON):

    --dest は保存するディレクトリーのパス。 --comment --video --thumbnail はそれぞれ -c -v -tと略記でき、さらにまとめて -cvt と書けます(順不同)。

    nicotools download -cvt --xml -dest "./Downloads" sm1

  • 「まいりすと」という名前のマイリストに登録された動画をすべてダウンロード:

    nicotools mylist まいりすと --export --out D:/Downloads/all.txt
    nicotools download -v +D:/Downloads/all.txt
    

Dealing with Mylists

  • MYLIST に追加する:

    nicotools mylist MYLIST --add sm1 sm2 sm3

  • 一行にひとつ動画IDを書いたテキストファイルから追加する:

    nicotools mylist MYLIST --add +C:/Users/Me/Desktop/ids.txt

  • 同名のマイリストがある場合は、IDで指定してください。IDはマイリストのURLの末尾にありますし、--export コマンドでも表示されます:

    nicotools mylist 12345678 --id --add sm1 sm2 sm3

  • MYLIST から削除する:

    nicotools mylist MYLIST --delete sm1 sm2 sm3

  • MYLIST から全て削除し、まっさらにする:

    nicotools mylist MYLIST --delete *

  • 確認なしでまっさらにする:

    nicotools mylist MYLIST --delete * --yes

  • MYLIST にある動画を foofoo に移動する:

    nicotools mylist MYLIST --to foofoo --move sm1 sm2 sm3

  • MYLIST にある全ての動画を barbar に移動する:

    nicotools mylist MYLIST --to barbar --move *

  • MYLIST にある動画を barboo にコピーする:

    nicotools mylist MYLIST --to baaboo --copy sm1 sm2 sm3

  • MYLIST にある全ての動画を barboo にコピーする:

    nicotools mylist MYLIST --to foobar --copy *

  • 全てのマイリストのID、名前、件数、作成日などを表示する:

    nicotools mylist * --show

  • 全てのマイリストの全ての動画を表示する(タブ区切りテキスト):

    nicotools mylist * --show --everything --out D:/Downloads/all.txt

  • 全てのマイリストの全ての動画を表示する(表形式テキスト):

    nicotools mylist * --show --show --everything --out D:/Downloads/all.txt

  • 単独のマイリストの動画IDだけを書き出す:

    nicotools mylist MYLIST --export

  • 全てのマイリストの動画IDだけを書き出す:

    nicotools mylist * --export --everything --out D:/Downloads/all.txt

  • 全てのマイリストのIDと名前を表示する:

    nicotools mylist * --export --out D:/Downloads/all.txt

  • LISTNAME という名前で新規作成する:

    nicotools mylist LISTNAME --create

  • マイリスト自体を削除する:

    nicotools mylist MYLIST --purge

  • マイリスト自体を確認なしで削除する:

    nicotools mylist MYLIST --purge --yes

Usage as a module

from nicotools.download import Video, Comment, Thumbnail

mail = "<your mail address>"
password = "<your password>"
xml = True  # True にするとXML形式で取ってくる。指定がなければ JSON。

# 動画IDのリスト
video_ids = ["sm1", "sm2", "sm3"]

# 保存場所
dir_path = "./downloads/"

Thumbnail(video_ids, dir_path).start()

Comment(video_ids, mail=mail, password=password, save_dir=dir_path, xml=xml).start()

Video(video_ids, save_dir=dir_path, mail=mail, password=password).start()

niconico-tools's People

Contributors

mo-san avatar tladudtn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

niconico-tools's Issues

ダウンロード途中でアクセスが切断されてしまう

以下のコマンドでダウンロードを試行すると途中でアクセスが切断されてしまいます。

nicotools download --limit 1 -cv -x http://www.nicovideo.jp/watch/sm31807439

[ INFO ] (1/1) ID: sm31807439 (【厳選】奇妙ゲーム集FINAL【PS1】) のコメントをダウンロードします。
[ INFO ] C:\Users\username\Desktop\sm31807439_【厳選】奇妙ゲーム集FINAL【PS1】.xml に保存しました。
[ INFO ] (1/1) ID: sm31807439 (【厳選】奇妙ゲーム集FINAL【PS1】) の動画をダウンロードします。
31%|████████████▌ | 140M/446M [05:00<09:39, 528kB/s][ INFO ] C:\Users\username\Desktop\sm31807439_【厳選】奇妙ゲーム集FINAL【PS1】.mp4 に保存しました。
Traceback (most recent call last):
File "c:\users\username\anaconda3\lib\runpy.py", line 193, in run_module_as_main
"main", mod_spec)
File "c:\users\username\anaconda3\lib\runpy.py", line 85, in run_code
exec(code, run_globals)
File "C:\Users\username\Anaconda3\Scripts\nicotools.exe_main
.py", line 9, in
File "c:\users\username\anaconda3\lib\site-packages\nicotools_init
.py", line 82, in main
return args.func(args)
File "c:\users\username\anaconda3\lib\site-packages\nicotools\download.py", line 1353, in main
logger=logger, division=args.limit, multiline=args.nomulti, smile=args.smile).start()
File "c:\users\username\anaconda3\lib\site-packages\nicotools\download.py", line 527, in start
VideoDmc(dmc_list, self.commons).callee()
File "c:\users\username\anaconda3\lib\site-packages\nicotools\download.py", line 706, in callee
self.loop.run_until_complete(self._broker(xml))
File "c:\users\username\anaconda3\lib\asyncio\base_events.py", line 468, in run_until_complete
return future.result()
File "c:\users\username\anaconda3\lib\site-packages\nicotools\download.py", line 725, in _broker
await asyncio.gather(*tasks)
File "c:\users\username\anaconda3\lib\site-packages\nicotools\download.py", line 951, in _download
progress_bars = await asyncio.gather(*tasks) # type: List[tqdm]
File "c:\users\username\anaconda3\lib\site-packages\nicotools\download.py", line 970, in _download_worker
data = await video_data.content.read(self.chunk_size)
File "c:\users\username\anaconda3\lib\site-packages\aiohttp\streams.py", line 319, in read
await self._wait('read')
File "c:\users\username\anaconda3\lib\site-packages\aiohttp\streams.py", line 250, in _wait
await waiter
File "c:\users\username\anaconda3\lib\site-packages\aiohttp\helpers.py", line 677, in exit
raise asyncio.TimeoutError from None
concurrent.futures._base.TimeoutError
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x000001405937C5F8>
Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x000001405953DF98>, 5570.437)]']
connector: <aiohttp.connector.TCPConnector object at 0x000001405A3C9BA8>

また、ダウンロードに成功したときも失敗したときもERRORLEVEL 1を返すのですが成功したときは0を返すようにしていただけないでしょうか?

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.