Mushroom Observer Import
This tool will import your observations from Mushroom Observer to iNat. You'll need to get a Mushroom Observer API key from http://mushroomobserver.org/account/api_keys
Enter your Mushroom Observer API key
Test
Enter your Mushroom Observer API key
Import
How This Works
iNat will import all of your MO observations, doing its best to translate MO's data model to our own. The testing tool above will give you a sense for what your imported data will look like on iNat. It should not import the same record twice, so if you run this multiple times, don't expect a record that's already been imported to change. It will store the MO URL as an observation field so you can always refer back to the original.
https://www.inaturalist.org/observations/moimport
Some caveats
Names will not allways match up: iNat will do its best to match MO names with iNat taxa, but it's not always going to be perfect. If we can't find a matching taxon, we'll just add a "placeholder" and you'll need to look for taxon-less observations to correct them.
iNat will use the MO consensus name, not your name. Getting your naming from the MO API seems to be impossible.
Observations not from collection location will be skipped: iNat is for recording observations from where and when they were observed in the wild.
You are the photo copyright holder: iNat does not support uploading photos by other people. It will assume and state publicly that you are the copyright holder for all images. https://www.inaturalist.org/observations/moimport
If you check "yes" for "Based on the evidence, can the Community ID still be confirmed or improved?" in the Data Quality Assessment section, your observation will go back to "needs ID" without singling out any person as unreliable.
That's the best way to do it. You could also turn off community ID for just that one observation and click 'no' for can't be improved. That should keep it at genus I thin
Another option is to add, say a family or genus-level ID rather than your species guess initially. You could mention what species you think it is in a comment. I often do that even when I have a hunch as to what the species is, to reduce the problem you mentioned.
Another option is to add, say a family or genus-level ID rather than your species guess initially. You could mention what species you think it is in a comment. I often do that even when I have a hunch as to what the species is, to reduce the problem you mentioned.
hat you are essentially saying is you are uncomfortable with people guessing to validate your guesses. The answer is to not guess in the first place. If you are not confident in a species ID, then enter it at genus or family etc. If someone follows that up with a fin
-- MAVERICK -- FALSE
For instance: wynand_uys identified an observation as "Lithobates areolatus" and it is not withdrawn, but the community ID is now "Animal" (https://www.inaturalist.org/observations/10786321)
How can I filter for all instances where there is a current ID posted of "Lithobates areolatus" where the community ID is not "Lithobates areolatus" ?
Maybe not exactly what you are looking for, but I know you can find observations where you are considered a "maverick":
https://www.inaturalist.org/identifications?user_id=tonyrebelo&category=maverick
I see there is also a "current" parameter.
In fact, it is on that screen. Exactly what I want is:
https://www.inaturalist.org/identifications?user_id=tonyrebelo¤t=false
====-====
Bij naturgucker zijn de fotos 10MP. Enig idee hoe ze dat doen ? Ik weet wel dat ze elke seconde 60 fotos op vragen om de response (cache) een beetje actief te houden ,de ng.de fotos in de cache te houden. De 1 MP fotos van wrn.nl vallen dan toch wat tegen ? (1. Ga naar https://naturgucker.de/natur.dll/$/, 2. Zoek een fotos, bijv van Madeira,
Comentarios
Using the URLconf defined in app.urls, Django tried these URL patterns, in this order:
[name='home']
admin/ [name='admin_home']
demo/
search/ [name='search']
djadmin/
generic/
locations/
countries/
fieldwork/
observation/int:pk/ [name='observation_detail']
projects/
protocols/
species/
tags/
attrs/
users/
news/
subsites/
taxa/
photos/
sounds/
social/
pages/
charts/
stats/
i18n/
jsi18n/ [name='javascript-catalog']
translations/
select2/
api/
api/noordzee/
api/meetnetten/observation/ [name='meetnetten-observation-upload']
api/meetnetten/observation/docs/ [name='meetnetten-observation-docs']
api/oauth2/token/ [name='oauth2-token']
api/oauth2/revoke_token/ [name='oauth2-revoke-token']
api/oauth2/authorize/ [name='oauth2-authorize']
api/userinfo/ [name='api-userinfo']
api/identify/v1/ [name='identify_proxy']
accounts/
new_site/on.php [name='switch_on']
new_site/off.php [name='switch_off']
^static2\/(?P.*)$
The current path, waarneming/view/164848920, didn't match any of these.
But you're welcome to write your own script that posts through our API
https://www.inaturalist.org/pages/developers
Here's a snippet of posting users and obs over the API written in Ruby
require 'rubygems'
require 'rest_client'
require 'json'
First, enter your app_id, app_secret, and redirect_uri from
http://gorilla.inaturalist.org/oauth/applications/206
site = "http://gorilla.inaturalist.org"
app_id = '308714d38eaf78ed57c11c0790f639d7d05e86cb7564f641629116e5b3bea024'
app_secret = '8be0ee61e1b7858a14c050b982eb3e6447b2d674075f3d8c58c8759ed2ee02a6'
redirect_uri = 'http://www.bd.dix/utils/migratelanding.cfm'
Next, visit this link on your browser while logged in as 'tegenligger'
http://gorilla.inaturalist.org/oauth/authorize?client_id=308714d38eaf78ed57c11c0790f639d7d05e86cb7564f641629116e5b3bea024&redirect_uri=http%3A%2F%2Fwww.bd.dix%2Futils%2Fmigratelanding.cfm&response_type=code
and get your auth code
auth_code = "d9c5335b17c0ec05f7444b1673c675b16a9a4d77f2d499b852778888503760a3"
Next, get a token for tegenligger
payload = {
:client_id => app_id,
:client_secret => app_secret,
:code => auth_code,
:redirect_uri => redirect_uri,
:grant_type => "authorization_code"
}
response = RestClient.post("#{site}/oauth/token", payload)
token = JSON.parse(response)["access_token"]
headers = {"Authorization" => "Bearer #{token}"}
Now make a user using tegenligger's token
username = 'testuser1'
email = 'testuser1@bar.net'
password = 'testuser1password'
results = RestClient.post("#{site}/users.json", {"user[login]" =>
username, "user[email]" => email, "user[password]" => password,
"user[password_confirmation]" => password}, headers)
puts "created http://gorilla.inaturalist.org/users/#{JSON.parse(results)["id"]}"
Now get a token for testuser1
payload = {
:client_id => app_id,
:client_secret => app_secret,
:grant_type => "password",
:username => username,
:password => password
}
puts "POST #{site}/oauth/token, payload: #{payload.inspect}"
response_for_user1 = RestClient.post("#{site}/oauth/token", payload)
token_for_user1 = JSON.parse(response)["access_token"]
headers_for_user1 = {"Authorization" => "Bearer #{token}"}
Now make a observation on behalf of testuser1
results = RestClient.post("#{site}/observations.json",{
"observation[species_guess]" => "Northern Cardinal",
"observation[taxon_id]" => 9083,
"observation[observed_on_string]" => "2013-01-03",
"observation[time_zone]" => "Eastern Time (US %26 Canada)",
"observation[description]" => "what a cardinal",
"observation[tag_list]" => "foo,bar",
"observation[place_guess]" => "clinton, ct",
"observation[latitude]" => 41.27872259999999,
"observation[longitude]" => -72.5276073,
"observation[map_scale]" => 11,
"observation[location_is_exact]" => false,
"observation[positional_accuracy]" => 7798,
"observation[geoprivacy]" => "obscured"
}, headers_for_user1)
puts "created http://gorilla.inaturalist.org/observations/#{JSON.parse(results)[0]["id"]}"
Now make a another user using tegenligger's token
username = 'testuser2'
email = 'testuser2@bar.net'
password = 'testuser2password'
results = RestClient.post("#{site}/users.json", {"user[login]" =>
username, "user[email]" => email, "user[password]" => password,
"user[password_confirmation]" => password}, headers)
puts "created http://gorilla.inaturalist.org/users/#{JSON.parse(results)["id"]}"
Now get a token for testuser2
payload = {
:client_id => app_id,
:client_secret => app_secret,
:grant_type => "password",
:username => username,
:password => password
}
puts "POST #{site}/oauth/token, payload: #{payload.inspect}"
response_for_user2 = RestClient.post("#{site}/oauth/token", payload)
token_for_user2 = JSON.parse(response)["access_token"]
headers_for_user2 = {"Authorization" => "Bearer #{token}"}
Now make a observation on behalf of testuser2
results = RestClient.post("#{site}/observations.json",{
"observation[species_guess]" => "Northern Cardinal",
"observation[taxon_id]" => 9083,
"observation[observed_on_string]" => "2013-01-03",
"observation[time_zone]" => "Eastern Time (US %26 Canada)",
"observation[description]" => "what a cardinal",
"observation[tag_list]" => "foo,bar",
"observation[place_guess]" => "clinton, ct",
"observation[latitude]" => 41.27872259999999,
"observation[longitude]" => -72.5276073,
"observation[map_scale]" => 11,
"observation[location_is_exact]" => false,
"observation[positional_accuracy]" => 7798,
"observation[geoprivacy]" => "obscured"
}, headers_for_user2)
puts "created http://gorilla.inaturalist.org/observations/#{JSON.parse(results)[0]["id"]}"
e I’m not querying the API directly is the rate limit any higher? Here is the script I’m currently using to download 1 photo/sec for 10k/day:
import os
import pickle
import requests
import shutil
import sys
import time
def download(url, name):
print(name)
with requests.get(url, stream=True) as r:
if r.status_code != 200:
print('{} error: {}'.format(r.status_code, url), file=sys.stderr)
return
r.raw.decode_content = True
with open('./ducks/{}.jpg'.format(name), 'wb') as f:
shutil.copyfileobj(r.raw, f)
def main():
os.makedirs('ducks', exist_ok=True)
present = set([x.replace('.jpg', '') for x in os.listdir('ducks')])
with open('duck_urls', 'rb') as f:
urls = pickle.load(f)
ctr = 0
for url in urls:
if ctr > 10000:
return
name = os.path.normpath(url).split(os.path.sep)[-2]
if name in present:
continue
download(url, name)
ctr += 1
time.sleep(1)
if name == 'main':
main()
It appears as if this link does not work anymore https://www.inaturalist.org/observations/moimport
https://forum.inaturalist.org/t/importing-from-mushroom-observer/29731/2
https://forum.inaturalist.org/t/mushroomobserver-import-time-observed-is-missing/21666
@ahospers Both of those links link to https://www.inaturalist.org/observations/moimport.html
It's the same link that I posted which returns a 404.
Añade un comentario