%global _empty_manifest_terminate_build 0 Name: python-pyinaturalist Version: 0.18.0 Release: 1 Summary: iNaturalist API client for python License: MIT URL: https://github.com/pyinat/pyinaturalist Source0: https://mirrors.nju.edu.cn/pypi/web/packages/3f/b5/ff26526213070ac72c4215350a0c641491c3cc66f49ca13febcfae6630cd/pyinaturalist-0.18.0.tar.gz BuildArch: noarch Requires: python3-attrs Requires: python3-keyring Requires: python3-platformdirs Requires: python3-dateutil Requires: python3-forge Requires: python3-requests Requires: python3-requests-cache Requires: python3-requests-ratelimiter Requires: python3-rich Requires: python3-ujson Requires: python3-furo Requires: python3-ipython Requires: python3-linkify-it-py Requires: python3-myst-parser Requires: python3-nbsphinx Requires: python3-sphinx Requires: python3-sphinx-automodapi Requires: python3-sphinx-autodoc-typehints Requires: python3-sphinx-copybutton Requires: python3-sphinx-design Requires: python3-sphinxcontrib-apidoc %description # pyinaturalist [![Build](https://github.com/pyinat/pyinaturalist/workflows/Build/badge.svg)](https://github.com/pyinat/pyinaturalist/actions) [![Codecov](https://codecov.io/gh/pyinat/pyinaturalist/branch/main/graph/badge.svg)](https://codecov.io/gh/pyinat/pyinaturalist) [![Documentation](https://img.shields.io/readthedocs/pyinaturalist/stable)](https://pyinaturalist.readthedocs.io) [![PyPI](https://img.shields.io/pypi/v/pyinaturalist?color=blue)](https://pypi.org/project/pyinaturalist) [![Conda](https://img.shields.io/conda/vn/conda-forge/pyinaturalist?color=blue)](https://anaconda.org/conda-forge/pyinaturalist) [![PyPI - Python Versions](https://img.shields.io/pypi/pyversions/pyinaturalist)](https://pypi.org/project/pyinaturalist) [![Run with Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/pyinat/pyinaturalist/main?urlpath=lab/tree/examples) [![Open in VSCode](docs/images/open-in-vscode.svg)](https://open.vscode.dev/pyinat/pyinaturalist)
[![](docs/images/pyinaturalist_logo_med.png)](https://pyinaturalist.readthedocs.io) # Introduction [**iNaturalist**](https://www.inaturalist.org) is a community science platform that helps people get involved in the natural world by observing and identifying the living things around them. Collectively, the community produces a rich source of global biodiversity data that can be valuable to anyone from hobbyists to scientists. **pyinaturalist** is a client for the [iNaturalist API](https://api.inaturalist.org/v1) that makes these data easily accessible in the python programming language. - [Features](#features) - [Quickstart](#quickstart) - [Next Steps](#next-steps) - [Feedback](#feedback) - [Related Projects](#related-projects) ## Features * ➑️ **Easier requests:** Simplified request formats, easy pagination, and complete request parameter type annotations for better IDE integration * ⬅️ **Convenient responses:** Type conversions to the things you would expect in python, and an optional object-oriented inteface for response data * πŸ”’ **Security:** Keyring integration for secure credential storage * πŸ“— **Docs:** Example requests, responses, scripts, and Jupyter notebooks to help get you started * πŸ’š **Responsible use:** Follows the [API Recommended Practices](https://www.inaturalist.org/pages/api+recommended+practices) by default, so you can be nice to the iNaturalist servers and not worry about rate-limiting errors * πŸ§ͺ **Testing:** A dry-run testing mode to preview your requests before potentially modifying data ### Supported Endpoints Many of the most relevant API endpoints are supported, including: * πŸ“ Annotations and observation fields * πŸ†” Identifications * πŸ’¬ Messages * πŸ‘€ Observations (multiple formats) * πŸ“· Observation photos + sounds * πŸ“Š Observation observers, identifiers, histograms, life lists, and species counts * πŸ“ Places * πŸ‘₯ Projects * 🐦Species * πŸ‘€ Users ## Quickstart Here are usage examples for some of the most commonly used features. First, install with pip: ```bash pip install pyinaturalist ``` Then, import the main API functions: ```python from pyinaturalist import * ``` ### Search observations Let's start by searching for all your own observations. There are [numerous fields you can search on](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.create_observation), but we'll just use `user_id` for now: ```python >>> observations = get_observations(user_id='my_username') ``` The full response will be in JSON format, but we can use `pyinaturalist.pprint()` to print out a summary: ```python >>> for obs in observations['results']: >>> pprint(obs) ID Taxon Observed on User Location ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117585709 Genus: Hyoscyamus (henbanes) May 18, 2022 niconoe Calvi, France 117464920 Genus: Omophlus May 17, 2022 niconoe GalΓ©ria, France 117464393 Genus: Briza (Rattlesnake Grasses) May 17, 2022 niconoe GalΓ©ria, France ... ``` You can also get [observation counts by species](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.get_observation_species_counts). On iNaturalist.org, this information can be found on the 'Species' tab of search results. For example, to get species counts of all your own research-grade observations: ```python >>> counts = get_observation_species_counts(user_id='my_username', quality_grade='research') >>> pprint(counts) ID Rank Scientific name Common name Count ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 47934 species πŸ› Libellula luctuosa Widow Skimmer 7 48627 species 🌻 Echinacea purpurea Purple Coneflower 6 504060 species πŸ„ Pleurotus citrinopileatus Golden Oyster Mushroom 6 ... ``` Another useful format is the [observation histogram](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.get_observation_histogram), which shows the number of observations over a given interval. The default is `month_of_year`: ```python >>> histogram = get_observation_histogram(user_id='my_username') >>> print(histogram) { 1: 8, # January 2: 1, # February 3: 19, # March ..., # etc. } ``` ### Create and update observations To create or modify observations, you will first need to log in. This requires creating an [iNaturalist app](https://www.inaturalist.org/oauth/applications/new), which will be used to get an access token. ```python token = get_access_token( username='my_username', password='my_password', app_id='my_app_id', app_secret='my_app_secret', ) ``` See [Authentication](https://pyinaturalist.readthedocs.io/en/latest/user_guide.html#authentication) for more options including environment variables, keyrings, and password managers. Now we can [create a new observation](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.create_observation): ```python from datetime import datetime response = create_observation( taxon_id=54327, # Vespa Crabro observed_on_string=datetime.now(), time_zone='Brussels', description='This is a free text comment for the observation', tag_list='wasp, Belgium', latitude=50.647143, longitude=4.360216, positional_accuracy=50, # GPS accuracy in meters access_token=token, photos=['~/observations/wasp1.jpg', '~/observations/wasp2.jpg'], ) # Save the new observation ID new_observation_id = response[0]['id'] ``` We can then [update the observation](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.update_observation) information, photos, or sounds: ```python update_observation( 17932425, access_token=token, description='updated description !', photos='~/observations/wasp_nest.jpg', sounds='~/observations/wasp_nest.mp3', ) ``` ### Search species Let's say you partially remember either a genus or family name that started with **'vespi'**-something. The [taxa endpoint](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.taxa.html#pyinaturalist.v1.taxa.get_taxa) can be used to search by name, rank, and several other criteria ```python >>> response = get_taxa(q='vespi', rank=['genus', 'family']) ``` As with observations, there is a lot of information in the response, but we'll print just a few basic details: ```python >>> pprint(response) [52747] Family: Vespidae (Hornets, Paper Wasps, Potter Wasps, and Allies) [92786] Genus: Vespicula [84737] Genus: Vespina ... ``` ## Next Steps For more information, see: * [User Guide](https://pyinaturalist.readthedocs.io/en/latest/user_guide.html): introduction and general features that apply to most endpoints * [Endpoint Summary](https://pyinaturalist.readthedocs.io/en/latest/endpoints.html): a complete list of endpoints wrapped by pyinaturalist * [Examples](https://pyinaturalist.readthedocs.io/en/stable/examples.html): data visualizations and other examples of things to do with iNaturalist data * [Reference](https://pyinaturalist.readthedocs.io/en/latest/reference.html): Detailed API documentation * [Contributing Guide](https://pyinaturalist.readthedocs.io/en/stable/contributing.html): development details for anyone interested in contributing to pyinaturalist * [History](https://github.com/pyinat/pyinaturalist/blob/dev/HISTORY.md): details on past and current releases * [Issues](https://github.com/pyinat/pyinaturalist/issues): planned & proposed features ## Feedback If you have any problems, suggestions, or questions about pyinaturalist, please let us know! Just [create an issue](https://github.com/pyinat/pyinaturalist/issues/new/choose). Also, **PRs are welcome!** **Note:** pyinaturalist is developed by members of the iNaturalist community, and is not endorsed by iNaturalist.org or the California Academy of Sciences. If you have non-python-specific questions about the iNaturalist API or iNaturalist in general, the [iNaturalist Community Forum](https://forum.inaturalist.org/) is the best place to start. ## Related Projects Other python projects related to iNaturalist: * [naturtag](https://github.com/pyinat/naturtag): A desktop application for tagging image files with iNaturalist taxonomy & observation metadata * [pyinaturalist-convert](https://github.com/pyinat/pyinaturalist-convert): Tools to convert observation data to and from a variety of useful formats * [pyinaturalist-notebook](https://github.com/pyinat/pyinaturalist-notebook): Jupyter notebook Docker image for pyinaturalist * [dronefly](https://github.com/dronefly-garden/dronefly): A Discord bot with iNaturalist integration, used by the iNaturalist Discord server. %package -n python3-pyinaturalist Summary: iNaturalist API client for python Provides: python-pyinaturalist BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-pyinaturalist # pyinaturalist [![Build](https://github.com/pyinat/pyinaturalist/workflows/Build/badge.svg)](https://github.com/pyinat/pyinaturalist/actions) [![Codecov](https://codecov.io/gh/pyinat/pyinaturalist/branch/main/graph/badge.svg)](https://codecov.io/gh/pyinat/pyinaturalist) [![Documentation](https://img.shields.io/readthedocs/pyinaturalist/stable)](https://pyinaturalist.readthedocs.io) [![PyPI](https://img.shields.io/pypi/v/pyinaturalist?color=blue)](https://pypi.org/project/pyinaturalist) [![Conda](https://img.shields.io/conda/vn/conda-forge/pyinaturalist?color=blue)](https://anaconda.org/conda-forge/pyinaturalist) [![PyPI - Python Versions](https://img.shields.io/pypi/pyversions/pyinaturalist)](https://pypi.org/project/pyinaturalist) [![Run with Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/pyinat/pyinaturalist/main?urlpath=lab/tree/examples) [![Open in VSCode](docs/images/open-in-vscode.svg)](https://open.vscode.dev/pyinat/pyinaturalist)
[![](docs/images/pyinaturalist_logo_med.png)](https://pyinaturalist.readthedocs.io) # Introduction [**iNaturalist**](https://www.inaturalist.org) is a community science platform that helps people get involved in the natural world by observing and identifying the living things around them. Collectively, the community produces a rich source of global biodiversity data that can be valuable to anyone from hobbyists to scientists. **pyinaturalist** is a client for the [iNaturalist API](https://api.inaturalist.org/v1) that makes these data easily accessible in the python programming language. - [Features](#features) - [Quickstart](#quickstart) - [Next Steps](#next-steps) - [Feedback](#feedback) - [Related Projects](#related-projects) ## Features * ➑️ **Easier requests:** Simplified request formats, easy pagination, and complete request parameter type annotations for better IDE integration * ⬅️ **Convenient responses:** Type conversions to the things you would expect in python, and an optional object-oriented inteface for response data * πŸ”’ **Security:** Keyring integration for secure credential storage * πŸ“— **Docs:** Example requests, responses, scripts, and Jupyter notebooks to help get you started * πŸ’š **Responsible use:** Follows the [API Recommended Practices](https://www.inaturalist.org/pages/api+recommended+practices) by default, so you can be nice to the iNaturalist servers and not worry about rate-limiting errors * πŸ§ͺ **Testing:** A dry-run testing mode to preview your requests before potentially modifying data ### Supported Endpoints Many of the most relevant API endpoints are supported, including: * πŸ“ Annotations and observation fields * πŸ†” Identifications * πŸ’¬ Messages * πŸ‘€ Observations (multiple formats) * πŸ“· Observation photos + sounds * πŸ“Š Observation observers, identifiers, histograms, life lists, and species counts * πŸ“ Places * πŸ‘₯ Projects * 🐦Species * πŸ‘€ Users ## Quickstart Here are usage examples for some of the most commonly used features. First, install with pip: ```bash pip install pyinaturalist ``` Then, import the main API functions: ```python from pyinaturalist import * ``` ### Search observations Let's start by searching for all your own observations. There are [numerous fields you can search on](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.create_observation), but we'll just use `user_id` for now: ```python >>> observations = get_observations(user_id='my_username') ``` The full response will be in JSON format, but we can use `pyinaturalist.pprint()` to print out a summary: ```python >>> for obs in observations['results']: >>> pprint(obs) ID Taxon Observed on User Location ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117585709 Genus: Hyoscyamus (henbanes) May 18, 2022 niconoe Calvi, France 117464920 Genus: Omophlus May 17, 2022 niconoe GalΓ©ria, France 117464393 Genus: Briza (Rattlesnake Grasses) May 17, 2022 niconoe GalΓ©ria, France ... ``` You can also get [observation counts by species](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.get_observation_species_counts). On iNaturalist.org, this information can be found on the 'Species' tab of search results. For example, to get species counts of all your own research-grade observations: ```python >>> counts = get_observation_species_counts(user_id='my_username', quality_grade='research') >>> pprint(counts) ID Rank Scientific name Common name Count ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 47934 species πŸ› Libellula luctuosa Widow Skimmer 7 48627 species 🌻 Echinacea purpurea Purple Coneflower 6 504060 species πŸ„ Pleurotus citrinopileatus Golden Oyster Mushroom 6 ... ``` Another useful format is the [observation histogram](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.get_observation_histogram), which shows the number of observations over a given interval. The default is `month_of_year`: ```python >>> histogram = get_observation_histogram(user_id='my_username') >>> print(histogram) { 1: 8, # January 2: 1, # February 3: 19, # March ..., # etc. } ``` ### Create and update observations To create or modify observations, you will first need to log in. This requires creating an [iNaturalist app](https://www.inaturalist.org/oauth/applications/new), which will be used to get an access token. ```python token = get_access_token( username='my_username', password='my_password', app_id='my_app_id', app_secret='my_app_secret', ) ``` See [Authentication](https://pyinaturalist.readthedocs.io/en/latest/user_guide.html#authentication) for more options including environment variables, keyrings, and password managers. Now we can [create a new observation](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.create_observation): ```python from datetime import datetime response = create_observation( taxon_id=54327, # Vespa Crabro observed_on_string=datetime.now(), time_zone='Brussels', description='This is a free text comment for the observation', tag_list='wasp, Belgium', latitude=50.647143, longitude=4.360216, positional_accuracy=50, # GPS accuracy in meters access_token=token, photos=['~/observations/wasp1.jpg', '~/observations/wasp2.jpg'], ) # Save the new observation ID new_observation_id = response[0]['id'] ``` We can then [update the observation](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.update_observation) information, photos, or sounds: ```python update_observation( 17932425, access_token=token, description='updated description !', photos='~/observations/wasp_nest.jpg', sounds='~/observations/wasp_nest.mp3', ) ``` ### Search species Let's say you partially remember either a genus or family name that started with **'vespi'**-something. The [taxa endpoint](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.taxa.html#pyinaturalist.v1.taxa.get_taxa) can be used to search by name, rank, and several other criteria ```python >>> response = get_taxa(q='vespi', rank=['genus', 'family']) ``` As with observations, there is a lot of information in the response, but we'll print just a few basic details: ```python >>> pprint(response) [52747] Family: Vespidae (Hornets, Paper Wasps, Potter Wasps, and Allies) [92786] Genus: Vespicula [84737] Genus: Vespina ... ``` ## Next Steps For more information, see: * [User Guide](https://pyinaturalist.readthedocs.io/en/latest/user_guide.html): introduction and general features that apply to most endpoints * [Endpoint Summary](https://pyinaturalist.readthedocs.io/en/latest/endpoints.html): a complete list of endpoints wrapped by pyinaturalist * [Examples](https://pyinaturalist.readthedocs.io/en/stable/examples.html): data visualizations and other examples of things to do with iNaturalist data * [Reference](https://pyinaturalist.readthedocs.io/en/latest/reference.html): Detailed API documentation * [Contributing Guide](https://pyinaturalist.readthedocs.io/en/stable/contributing.html): development details for anyone interested in contributing to pyinaturalist * [History](https://github.com/pyinat/pyinaturalist/blob/dev/HISTORY.md): details on past and current releases * [Issues](https://github.com/pyinat/pyinaturalist/issues): planned & proposed features ## Feedback If you have any problems, suggestions, or questions about pyinaturalist, please let us know! Just [create an issue](https://github.com/pyinat/pyinaturalist/issues/new/choose). Also, **PRs are welcome!** **Note:** pyinaturalist is developed by members of the iNaturalist community, and is not endorsed by iNaturalist.org or the California Academy of Sciences. If you have non-python-specific questions about the iNaturalist API or iNaturalist in general, the [iNaturalist Community Forum](https://forum.inaturalist.org/) is the best place to start. ## Related Projects Other python projects related to iNaturalist: * [naturtag](https://github.com/pyinat/naturtag): A desktop application for tagging image files with iNaturalist taxonomy & observation metadata * [pyinaturalist-convert](https://github.com/pyinat/pyinaturalist-convert): Tools to convert observation data to and from a variety of useful formats * [pyinaturalist-notebook](https://github.com/pyinat/pyinaturalist-notebook): Jupyter notebook Docker image for pyinaturalist * [dronefly](https://github.com/dronefly-garden/dronefly): A Discord bot with iNaturalist integration, used by the iNaturalist Discord server. %package help Summary: Development documents and examples for pyinaturalist Provides: python3-pyinaturalist-doc %description help # pyinaturalist [![Build](https://github.com/pyinat/pyinaturalist/workflows/Build/badge.svg)](https://github.com/pyinat/pyinaturalist/actions) [![Codecov](https://codecov.io/gh/pyinat/pyinaturalist/branch/main/graph/badge.svg)](https://codecov.io/gh/pyinat/pyinaturalist) [![Documentation](https://img.shields.io/readthedocs/pyinaturalist/stable)](https://pyinaturalist.readthedocs.io) [![PyPI](https://img.shields.io/pypi/v/pyinaturalist?color=blue)](https://pypi.org/project/pyinaturalist) [![Conda](https://img.shields.io/conda/vn/conda-forge/pyinaturalist?color=blue)](https://anaconda.org/conda-forge/pyinaturalist) [![PyPI - Python Versions](https://img.shields.io/pypi/pyversions/pyinaturalist)](https://pypi.org/project/pyinaturalist) [![Run with Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/pyinat/pyinaturalist/main?urlpath=lab/tree/examples) [![Open in VSCode](docs/images/open-in-vscode.svg)](https://open.vscode.dev/pyinat/pyinaturalist)
[![](docs/images/pyinaturalist_logo_med.png)](https://pyinaturalist.readthedocs.io) # Introduction [**iNaturalist**](https://www.inaturalist.org) is a community science platform that helps people get involved in the natural world by observing and identifying the living things around them. Collectively, the community produces a rich source of global biodiversity data that can be valuable to anyone from hobbyists to scientists. **pyinaturalist** is a client for the [iNaturalist API](https://api.inaturalist.org/v1) that makes these data easily accessible in the python programming language. - [Features](#features) - [Quickstart](#quickstart) - [Next Steps](#next-steps) - [Feedback](#feedback) - [Related Projects](#related-projects) ## Features * ➑️ **Easier requests:** Simplified request formats, easy pagination, and complete request parameter type annotations for better IDE integration * ⬅️ **Convenient responses:** Type conversions to the things you would expect in python, and an optional object-oriented inteface for response data * πŸ”’ **Security:** Keyring integration for secure credential storage * πŸ“— **Docs:** Example requests, responses, scripts, and Jupyter notebooks to help get you started * πŸ’š **Responsible use:** Follows the [API Recommended Practices](https://www.inaturalist.org/pages/api+recommended+practices) by default, so you can be nice to the iNaturalist servers and not worry about rate-limiting errors * πŸ§ͺ **Testing:** A dry-run testing mode to preview your requests before potentially modifying data ### Supported Endpoints Many of the most relevant API endpoints are supported, including: * πŸ“ Annotations and observation fields * πŸ†” Identifications * πŸ’¬ Messages * πŸ‘€ Observations (multiple formats) * πŸ“· Observation photos + sounds * πŸ“Š Observation observers, identifiers, histograms, life lists, and species counts * πŸ“ Places * πŸ‘₯ Projects * 🐦Species * πŸ‘€ Users ## Quickstart Here are usage examples for some of the most commonly used features. First, install with pip: ```bash pip install pyinaturalist ``` Then, import the main API functions: ```python from pyinaturalist import * ``` ### Search observations Let's start by searching for all your own observations. There are [numerous fields you can search on](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.create_observation), but we'll just use `user_id` for now: ```python >>> observations = get_observations(user_id='my_username') ``` The full response will be in JSON format, but we can use `pyinaturalist.pprint()` to print out a summary: ```python >>> for obs in observations['results']: >>> pprint(obs) ID Taxon Observed on User Location ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117585709 Genus: Hyoscyamus (henbanes) May 18, 2022 niconoe Calvi, France 117464920 Genus: Omophlus May 17, 2022 niconoe GalΓ©ria, France 117464393 Genus: Briza (Rattlesnake Grasses) May 17, 2022 niconoe GalΓ©ria, France ... ``` You can also get [observation counts by species](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.get_observation_species_counts). On iNaturalist.org, this information can be found on the 'Species' tab of search results. For example, to get species counts of all your own research-grade observations: ```python >>> counts = get_observation_species_counts(user_id='my_username', quality_grade='research') >>> pprint(counts) ID Rank Scientific name Common name Count ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 47934 species πŸ› Libellula luctuosa Widow Skimmer 7 48627 species 🌻 Echinacea purpurea Purple Coneflower 6 504060 species πŸ„ Pleurotus citrinopileatus Golden Oyster Mushroom 6 ... ``` Another useful format is the [observation histogram](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.get_observation_histogram), which shows the number of observations over a given interval. The default is `month_of_year`: ```python >>> histogram = get_observation_histogram(user_id='my_username') >>> print(histogram) { 1: 8, # January 2: 1, # February 3: 19, # March ..., # etc. } ``` ### Create and update observations To create or modify observations, you will first need to log in. This requires creating an [iNaturalist app](https://www.inaturalist.org/oauth/applications/new), which will be used to get an access token. ```python token = get_access_token( username='my_username', password='my_password', app_id='my_app_id', app_secret='my_app_secret', ) ``` See [Authentication](https://pyinaturalist.readthedocs.io/en/latest/user_guide.html#authentication) for more options including environment variables, keyrings, and password managers. Now we can [create a new observation](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.create_observation): ```python from datetime import datetime response = create_observation( taxon_id=54327, # Vespa Crabro observed_on_string=datetime.now(), time_zone='Brussels', description='This is a free text comment for the observation', tag_list='wasp, Belgium', latitude=50.647143, longitude=4.360216, positional_accuracy=50, # GPS accuracy in meters access_token=token, photos=['~/observations/wasp1.jpg', '~/observations/wasp2.jpg'], ) # Save the new observation ID new_observation_id = response[0]['id'] ``` We can then [update the observation](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.observations.html#pyinaturalist.v1.observations.update_observation) information, photos, or sounds: ```python update_observation( 17932425, access_token=token, description='updated description !', photos='~/observations/wasp_nest.jpg', sounds='~/observations/wasp_nest.mp3', ) ``` ### Search species Let's say you partially remember either a genus or family name that started with **'vespi'**-something. The [taxa endpoint](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.v1.taxa.html#pyinaturalist.v1.taxa.get_taxa) can be used to search by name, rank, and several other criteria ```python >>> response = get_taxa(q='vespi', rank=['genus', 'family']) ``` As with observations, there is a lot of information in the response, but we'll print just a few basic details: ```python >>> pprint(response) [52747] Family: Vespidae (Hornets, Paper Wasps, Potter Wasps, and Allies) [92786] Genus: Vespicula [84737] Genus: Vespina ... ``` ## Next Steps For more information, see: * [User Guide](https://pyinaturalist.readthedocs.io/en/latest/user_guide.html): introduction and general features that apply to most endpoints * [Endpoint Summary](https://pyinaturalist.readthedocs.io/en/latest/endpoints.html): a complete list of endpoints wrapped by pyinaturalist * [Examples](https://pyinaturalist.readthedocs.io/en/stable/examples.html): data visualizations and other examples of things to do with iNaturalist data * [Reference](https://pyinaturalist.readthedocs.io/en/latest/reference.html): Detailed API documentation * [Contributing Guide](https://pyinaturalist.readthedocs.io/en/stable/contributing.html): development details for anyone interested in contributing to pyinaturalist * [History](https://github.com/pyinat/pyinaturalist/blob/dev/HISTORY.md): details on past and current releases * [Issues](https://github.com/pyinat/pyinaturalist/issues): planned & proposed features ## Feedback If you have any problems, suggestions, or questions about pyinaturalist, please let us know! Just [create an issue](https://github.com/pyinat/pyinaturalist/issues/new/choose). Also, **PRs are welcome!** **Note:** pyinaturalist is developed by members of the iNaturalist community, and is not endorsed by iNaturalist.org or the California Academy of Sciences. If you have non-python-specific questions about the iNaturalist API or iNaturalist in general, the [iNaturalist Community Forum](https://forum.inaturalist.org/) is the best place to start. ## Related Projects Other python projects related to iNaturalist: * [naturtag](https://github.com/pyinat/naturtag): A desktop application for tagging image files with iNaturalist taxonomy & observation metadata * [pyinaturalist-convert](https://github.com/pyinat/pyinaturalist-convert): Tools to convert observation data to and from a variety of useful formats * [pyinaturalist-notebook](https://github.com/pyinat/pyinaturalist-notebook): Jupyter notebook Docker image for pyinaturalist * [dronefly](https://github.com/dronefly-garden/dronefly): A Discord bot with iNaturalist integration, used by the iNaturalist Discord server. %prep %autosetup -n pyinaturalist-0.18.0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-pyinaturalist -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Thu May 18 2023 Python_Bot - 0.18.0-1 - Package Spec generated