All Projects → niconoe → pyinaturalist

niconoe / pyinaturalist

Licence: MIT license
Python client for iNaturalist

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to pyinaturalist

naturtag
Tag your nature photos with iNat taxonomy and observation metadata
Stars: ✭ 20 (-70.59%)
Mutual labels:  biodiversity, inaturalist, biodiversity-data
OZtree
OneZoom Tree of Life Explorer
Stars: ✭ 53 (-22.06%)
Mutual labels:  biodiversity-informatics, biodiversity
arctos
Arctos is a museum collections management system
Stars: ✭ 39 (-42.65%)
Mutual labels:  biodiversity-informatics, biodiversity-data
pyracing
A complete overhaul of the original ir_webstats; pyracing is an API client/wrapper for iRacing, the leading online simracing service. pyracing handles the queries to iRacing's (known) URL endpoints and maps the returned JSON data into structured objects, allowing for easier access to the data.
Stars: ✭ 52 (-23.53%)
Mutual labels:  api-client
mailerlite-api-python
Python wrapper for Mailerlite API v2
Stars: ✭ 31 (-54.41%)
Mutual labels:  api-client
nomisr
Access UK official statistics from the Nomis database through R.
Stars: ✭ 30 (-55.88%)
Mutual labels:  api-client
yllet
Yllet is a set of packages for the WordPress API for both React and non-React projects
Stars: ✭ 46 (-32.35%)
Mutual labels:  api-client
airtable
Airtable API Client for Go
Stars: ✭ 25 (-63.24%)
Mutual labels:  api-client
square-python-sdk
Python client library for the Square API
Stars: ✭ 72 (+5.88%)
Mutual labels:  api-client
notionapi-agent
Unofficial Node.js API client for Notion.so
Stars: ✭ 89 (+30.88%)
Mutual labels:  api-client
react-google-sheet
Pulling data from Google Sheets with React components
Stars: ✭ 24 (-64.71%)
Mutual labels:  api-client
CryptoCurrency.Net
CryptoCurrency.Net
Stars: ✭ 21 (-69.12%)
Mutual labels:  api-client
devices.sensor.community
devices.sensor.community
Stars: ✭ 16 (-76.47%)
Mutual labels:  citizen-science
finch
⚠️ ARCHIVED ⚠️ Read Darwin Core Archive files
Stars: ✭ 17 (-75%)
Mutual labels:  biodiversity
pimba
Pimba is a minimalist command-line tool written in Go to publish and serve static files.
Stars: ✭ 12 (-82.35%)
Mutual labels:  api-client
FTAPIKit
Declarative and generic REST API framework using Codable.
Stars: ✭ 18 (-73.53%)
Mutual labels:  api-client
goco
Connecting to Google API has never been easier!
Stars: ✭ 14 (-79.41%)
Mutual labels:  api-client
restofus
Restofus - a cross-platform (REST) API client.
Stars: ✭ 18 (-73.53%)
Mutual labels:  api-client
als typograf
Ruby client for ArtLebedevStudio.RemoteTypograf Web Service.
Stars: ✭ 15 (-77.94%)
Mutual labels:  api-client
clients-generator
Kaltura API Client Libraries Generator - PHP source code introspection based automation for API native SDKs generation for various programming languages and API platforms
Stars: ✭ 17 (-75%)
Mutual labels:  api-client

pyinaturalist

Build Codecov Documentation

PyPI Conda PyPI - Python Versions

Run with Binder Open in VSCode


Introduction

iNaturalist 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 that makes these data easily accessible in the python programming language.

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 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:

pip install pyinaturalist

Then, import the main API functions:

from pyinaturalist import *

Search observations

Let's start by searching for all your own observations. There are numerous fields you can search on, but we'll just use user_id for now:

>>> 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:

>>> 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. 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:

>>> 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, which shows the number of observations over a given interval. The default is month_of_year:

>>> 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, which will be used to get an access token.

token = get_access_token(
    username='my_username',
    password='my_password',
    app_id='my_app_id',
    app_secret='my_app_secret',
)

See Authentication for more options including environment variables, keyrings, and password managers.

Now we can create a new observation:

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 information, photos, or sounds:

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 can be used to search by name, rank, and several other criteria

>>> 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:

>>> 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: introduction and general features that apply to most endpoints
  • Endpoint Summary: a complete list of endpoints wrapped by pyinaturalist
  • Examples: data visualizations and other examples of things to do with iNaturalist data
  • Reference: Detailed API documentation
  • Contributing Guide: development details for anyone interested in contributing to pyinaturalist
  • History: details on past and current releases
  • Issues: planned & proposed features

Feedback

If you have any problems, suggestions, or questions about pyinaturalist, please let us know! Just create an issue. 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 is the best place to start.

Related Projects

Other python projects related to iNaturalist:

  • naturtag: A desktop application for tagging image files with iNaturalist taxonomy & observation metadata
  • pyinaturalist-convert: Tools to convert observation data to and from a variety of useful formats
  • pyinaturalist-notebook: Jupyter notebook Docker image for pyinaturalist
  • dronefly: A Discord bot with iNaturalist integration, used by the iNaturalist Discord server.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].