Have setuptools setup.py for serious distribution
This is a) cooler and b) a requirement for deploying it on PyPI. It removes need of __all__ shit (which is hard to keep updated), and allows installing instaloader easily as a global module and executable. Additionally it removes __init__.py.
This commit is contained in:
parent
70c91e000e
commit
c2957e389f
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,2 +1,4 @@
|
|||||||
__pycache__/
|
__pycache__/
|
||||||
.idea
|
build/
|
||||||
|
dist/
|
||||||
|
instaloader.egg-info/
|
||||||
|
29
README.md
29
README.md
@ -4,30 +4,39 @@ Simple downloader to fetch all Instagram pictures and captions from a given prof
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Ensure having [Python](https://www.python.org/) (at least version 3.3) and
|
instaloader is written in Python, thus ensure having
|
||||||
[python3-requests](https://pypi.python.org/pypi/requests/) installed.
|
[Python](https://www.python.org/) (at least version 3.3) installed.
|
||||||
|
|
||||||
If you intend to use this tool under Windows, it is highly recommended to first install
|
If you intend to use this tool under Windows, it is highly recommended to first install
|
||||||
[win-unicode-console](https://github.com/Drekin/win-unicode-console).
|
[win-unicode-console](https://github.com/Drekin/win-unicode-console).
|
||||||
|
|
||||||
After having [downloaded instaloader.py](https://github.com/Thammus/instaloader/releases), you
|
After having [downloaded instaloader](https://github.com/Thammus/instaloader/releases), unzip it and
|
||||||
invoke it with
|
invoke bundled `setup.py` (requiring [setuptools](https://pypi.python.org/pypi/setuptools)) to
|
||||||
|
install it:
|
||||||
```
|
```
|
||||||
./instaloader.py profile [profile ...]
|
./setup.py install [--user]
|
||||||
|
```
|
||||||
|
(pass `--user` to install it for your user only instead of globally)
|
||||||
|
instaloader requires [python3-requests](https://pypi.python.org/pypi/requests/), which will be
|
||||||
|
installed automatically by setup.py, if not already installed.
|
||||||
|
|
||||||
|
Now, to download a set of profiles, do
|
||||||
|
```
|
||||||
|
instaloader profile [profile ...]
|
||||||
```
|
```
|
||||||
where `profile` is the name of a profile you want to download. Instead of only one profile, you may
|
where `profile` is the name of a profile you want to download. Instead of only one profile, you may
|
||||||
also specify a list of profiles.
|
also specify a list of profiles.
|
||||||
|
|
||||||
To later update your local copy of that profile, you may run
|
To later update your local copy of that profile, you may run
|
||||||
```
|
```
|
||||||
./instaloader.py --fast-update profile [profile ...]
|
instaloader --fast-update profile [profile ...]
|
||||||
```
|
```
|
||||||
When `--fast-update` is given, instaloder terminates when arriving at the first already-downloaded
|
When `--fast-update` is given, instaloder terminates when arriving at the first already-downloaded
|
||||||
picture.
|
picture.
|
||||||
|
|
||||||
Instaloader can also be used to **download private profiles**. To do so, invoke it with
|
Instaloader can also be used to **download private profiles**. To do so, invoke it with
|
||||||
```
|
```
|
||||||
./instaloader.py --login=your_username profile [profile ...]
|
instaloader --login=your_username profile [profile ...]
|
||||||
```
|
```
|
||||||
When invoked like this, it also **stores the session cookies** in a file in `/tmp`, which will be
|
When invoked like this, it also **stores the session cookies** in a file in `/tmp`, which will be
|
||||||
reused later when `--login` is given. So you can download private profiles **non-interactively**
|
reused later when `--login` is given. So you can download private profiles **non-interactively**
|
||||||
@ -35,17 +44,17 @@ when you already have a valid session cookies file.
|
|||||||
|
|
||||||
If you want to **download all followees of a given profile**, call
|
If you want to **download all followees of a given profile**, call
|
||||||
```
|
```
|
||||||
./instaloader.py --login=your_username @profile
|
instaloader --login=your_username @profile
|
||||||
```
|
```
|
||||||
|
|
||||||
To **download all the pictures which you have liked**, call
|
To **download all the pictures which you have liked**, call
|
||||||
```
|
```
|
||||||
./instaloader.py --login=your_username :feed-liked
|
instaloader --login=your_username :feed-liked
|
||||||
```
|
```
|
||||||
|
|
||||||
The `--quiet` option makes it also **suitable as a cron job**.
|
The `--quiet` option makes it also **suitable as a cron job**.
|
||||||
|
|
||||||
To get a list of other helpful flags, run `./instaloader.py --help`.
|
To get a list of other helpful flags, run `instaloader --help`.
|
||||||
|
|
||||||
## Usage as library
|
## Usage as library
|
||||||
|
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
"""Simple downloader to fetch all Instagram pics and captions from a given profile"""
|
|
||||||
|
|
||||||
# pylint:disable=wildcard-import
|
|
||||||
from .instaloader import *
|
|
@ -1,11 +1,22 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
"""Download pictures and captions from Instagram"""
|
||||||
|
|
||||||
import re, json, datetime, shutil, os, time, random, sys, pickle, getpass, tempfile
|
import re, json, datetime, shutil, os, time, random, sys, pickle, getpass, tempfile
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
import requests, requests.utils
|
import requests, requests.utils
|
||||||
|
|
||||||
|
# To get version from setup.py for instaloader --version
|
||||||
|
import pkg_resources
|
||||||
try:
|
try:
|
||||||
|
# pylint:disable=no-member
|
||||||
|
__version__ = pkg_resources.get_distribution('instaloader').version
|
||||||
|
except pkg_resources.DistributionNotFound:
|
||||||
|
__version__ = 'Run ./setup.py --version'
|
||||||
|
|
||||||
|
try:
|
||||||
|
# pylint:disable=wrong-import-position
|
||||||
import win_unicode_console
|
import win_unicode_console
|
||||||
except ImportError:
|
except ImportError:
|
||||||
WINUNICODE = False
|
WINUNICODE = False
|
||||||
@ -13,16 +24,6 @@ else:
|
|||||||
win_unicode_console.enable()
|
win_unicode_console.enable()
|
||||||
WINUNICODE = True
|
WINUNICODE = True
|
||||||
|
|
||||||
# List of public objects which are provided by `import instaloader`.
|
|
||||||
__all__ = ['BadCredentialsException', 'ConnectionException', 'InstaloaderException',
|
|
||||||
'LoginRequiredException', 'NonfatalException', 'PrivateProfileNotFollowedException',
|
|
||||||
'ProfileHasNoPicsException', 'ProfileNotExistsException', 'check_id', 'copy_session',
|
|
||||||
'default_http_header', 'download', 'download_pic', 'download_profilepic',
|
|
||||||
'download_profiles', 'get_feed_json', 'download_feed_pics', 'epoch_to_string',
|
|
||||||
'get_anonymous_session',
|
|
||||||
'get_default_session_filename', 'get_file_extension', 'get_followees', 'get_id_by_username',
|
|
||||||
'get_json', 'get_last_id', 'get_logged_in_session', 'get_session', 'get_username_by_id',
|
|
||||||
'load_session', 'log', 'main', 'save_caption', 'save_session', 'test_login']
|
|
||||||
|
|
||||||
class InstaloaderException(Exception):
|
class InstaloaderException(Exception):
|
||||||
"""Base exception for this script"""
|
"""Base exception for this script"""
|
||||||
@ -598,15 +599,14 @@ def download_profiles(profilelist, username=None, password=None, sessionfile=Non
|
|||||||
save_session(session, username, sessionfile, quiet=quiet)
|
save_session(session, username, sessionfile, quiet=quiet)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = ArgumentParser(description='Simple downloader to fetch all Instagram pics and '\
|
parser = ArgumentParser(description=__doc__)
|
||||||
'captions from a given profile')
|
|
||||||
parser.add_argument('profile', nargs='*',
|
parser.add_argument('profile', nargs='*',
|
||||||
help='Name of profile to download; @<profile> to download all followees of '
|
help='Name of profile to download; @<profile> to download all followees of '
|
||||||
'<profile>; or the special targets :feed-all or :feed-liked to '
|
'<profile>; or the special targets :feed-all or :feed-liked to '
|
||||||
'download pictures from your feed if --login is given (using '
|
'download pictures from your feed if --login is given (using '
|
||||||
'--fast-update is recommended).')
|
'--fast-update is recommended).')
|
||||||
parser.add_argument('--version', action='version',
|
parser.add_argument('--version', action='version',
|
||||||
version='1.0.1')
|
version=__version__)
|
||||||
parser.add_argument('-l', '--login', metavar='YOUR-USERNAME',
|
parser.add_argument('-l', '--login', metavar='YOUR-USERNAME',
|
||||||
help='Login name for your Instagram account. Not needed to download public '\
|
help='Login name for your Instagram account. Not needed to download public '\
|
||||||
'profiles, but if you want to download private profiles or all followees of '\
|
'profiles, but if you want to download private profiles or all followees of '\
|
||||||
|
30
setup.py
Executable file
30
setup.py
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from setuptools import setup
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name='instaloader',
|
||||||
|
version='1.0.1',
|
||||||
|
py_modules=['instaloader'],
|
||||||
|
url='https://github.com/Thammus/instaloader',
|
||||||
|
license='MIT',
|
||||||
|
author='Alexander Graf, André Koch-Kramer',
|
||||||
|
author_email='mail@agraf.me, koch-kramer@web.de',
|
||||||
|
description='Download pictures and captions from Instagram',
|
||||||
|
install_requires=['requests>=2.4'],
|
||||||
|
python_requires='>=3.3',
|
||||||
|
entry_points={'console_scripts': ['instaloader=instaloader:main']},
|
||||||
|
zip_safe=True,
|
||||||
|
keywords='instagram downloader',
|
||||||
|
classifiers=[
|
||||||
|
'Development Status :: 5 - Production/Stable',
|
||||||
|
'Environment :: Console',
|
||||||
|
'License :: OSI Approved :: MIT License',
|
||||||
|
'Operating System :: OS Independent',
|
||||||
|
'Programming Language :: Python :: 3.3',
|
||||||
|
'Programming Language :: Python :: 3.4',
|
||||||
|
'Programming Language :: Python :: 3.5',
|
||||||
|
'Programming Language :: Python :: 3.6'
|
||||||
|
'Topic :: Internet'
|
||||||
|
]
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user