Now, setup.py does not assume to be called from the path where the
source tree resides. This fixes getting the long_description and the
version if setup.py is called from outside.
These options instruct instaloader to not save captions or geotags
respectively, even if the regarding information can be obtained without
any additional queries to Instagram.
This feature was proposed in #25, and thus this commit should close#25.
Get rid of NonfatalException (an exception is nonfatal iff it is
catched somewhere)
Foreport fixes for #26 and #30.
The current __sersion__ string is now kept in instaloader.py rather than
setup.py. This lets instaloader.__version__ always deliver the version
of the actually-loaded Instaloader module.
Minor changes to README.rst, error handling and which class methods are
public.
With these and the changes of the previous commit, we saved 31 lines of
code, indicating that it might be easier to understand and to maintain.
Remove many code duplications, merely by using more pythonic idioms.
Use GraphQL more often.
Better cope with errors: All requests can be retried; failed requests do
not cause program termination; all error strings are repeated to the
user at the end of execution.
download_post() (formerly download_node()) does not repeat node metadata
request (before this commit, this request was executed up to three
times).
Unless --no-sleep is given, Instaloader waits between requests to the
Instagram servers.
This commit fixes and enhances this behavior. Now, --no-sleep is always
obeyed. Between requests to the instagram.com servers, there is now a
delay of 250 ms ~ 2000 ms. Requests to the file servers do not cause a
delay.
Instaloader downloads all posts in
<DIRNAME>/<FILENAME>+(suffix and extension)
which are now generated by the templates given with --dirname-pattern
and --filename-pattern. These templates may contain specifiers such as
'{target}', '{profile}', '{date}' and '{shortcode}'.
Default for --dirname-pattern is '{target}', default for
--filename-pattern is '{date:%Y-%m-%d_%H-%M-%S}'
The former options --no-profile-subdir and --hashtag-username were
removed, because their behavior can now be achieved like this:
--no-profile-subdir and --hashtag-username:
--dirname-pattern='.' --filename-pattern='{profile}__{date:%Y-%m-%d_%H-%M-%S}'
--no-profile-subdir, but not --hashtag-username:
--dirname-pattern='.' --filename-pattern='{target}__{date:%Y-%m-%d_%H-%M-%S}'
--hashtag-username but not --no-profile-subdir:
--dirname-pattern='{profile}'
This adds the option proposed in #23, to encode both the hashtag and the
profile name in the file's path when downloading by hashtag, e.g.:
--dirname-pattern='{target}' --filename-pattern='{profile}_{date:%Y-%m-%d_%H-%M-%S}'
(Closes#23)
On module level:
Cleaner exception handling for load_session_from file
interactive_login logs in interactively now, always asking the user for
password. Before, it had an optional password parameter determining
whether it was interactive or not.
On application level:
Warn if profile specifiers are used which require login, but not --login
flag was given (@profile, :feed-all, :feed-liked).
Clearly warn that --password is insecure.
With --hashtag-username given, if downloading per #hashtag, instead of
per username, for each picture an additional request to the Instagram
server is issued to lookup the picture's username. Instead of storing
files in #hashtag/timestamp.jpg, files are stored in
username/timestamp.jpg as it is the default when not downloading per
hashtag.
This closes#22.
Instaloader is now capable of downloading all pictures associated with
one #hashtag with:
instaloader #hashtag
This implements the feature requested with #18.
The check_id() step, including the get_username_by_id(), which is used
to determine whether a profile's account name has changed since the last
download using it's unique id when Instaloader is operating logged-in,
is actually optional and should not cause termination in any case.
In case you are blocked by a public profile which you intend to
download, the server responds as if the profile would not exist. Now in
this case, we retry the download without using an anonymous session.
- State in README.rst and setup.py metainfo that we require Python>=3.5
- Let Travis-CI test against newer versions of Python
- Let instaloader --help show where to report issues
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 allows doing `import instaloader` when instaloader is
located in a subdirectory "instaloader". This makes it easier to use
instaloader e.g. when it is imported using git submodules feature.
- Rename DownloaderException to InstaloaderException
- Introduce NonfatalException to make handling of these errors easier
- Avoid using of InstaloaderException directly
- Catch InstaloaderException and KeyboardInterrupt in main loop to exit
cleanly without stack trace
When a error like "user %s does not exist" occurs when downloading
multiple profiles, it now just prints a warning and continues instead
of aborting.
This fixes#2.
Er hatte Angst davor, in den Code zu schauen und hat einfach Dinge
behauptet.
Einfach mal in den scheiß Code schauen, für fünf Sekunden, und man
findet diesen scheiß Bug!!!
Jetzt behauptet der noch, das wär mein Bug weil es mein Return war, aber
als er dieses return username da einhackt hat, hätte er verdammt nochmal
sehen sollen, dass da NUR EIN KLEINES STÜCKCHEN weiter oben noch ein
Return ist!!!!
Das mit diesem return username sollte er ohnehin mal seriös
implementieren!