1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53#!/usr/bin/env python3 import json from hashlib import sha256 from urllib.request import Request, urlopen from urllib.parse import urlencode from os import environ def record_participation(email, project_slug): """Record participation for the specified user in the specified project This will appear to succeed, regardless of whether the user is actually a SciStarter user or not. However, in that case this API call is a no-op. It only reports an error if the request is incorrect in some way. If the email address does *not* belong to a SciStarter user, all we've received is an opaque hash value, which preserves the user's privacy; we have no way of reversing the hashing process to discover the email. The project_slug parameter should contain the textual unique identifier of the project. It is easily accesible from the project URL. In the URL https://scistarter.org/airborne-walrus-capture the slug is the string airborne-walrus-capture """ hashed = sha256(email.encode("utf8")).hexdigest() req = Request( method="POST", url="https://scistarter.org/api/participation/hashed/" + project_slug + "?key=" + environ["SCISTARTER_API_KEY"], data=urlencode( { "hashed": hashed, "type": "classification", # other options: 'collection', 'signup' "duration": 31, # Seconds the user spent participating, or an estimate } ).encode("utf8"), ) r = urlopen(req) if r.status != 200: raise Exception(r.status, r.reason) return json.loads(r.read()) if __name__ == "__main__": print(record_participation(input("Email: "), input("Project slug: ")))
Become a SciStarter Ambassador!
SciStarter Ambassador badge logo

Applications for Cohort 4 are open!

Libraries and community organizations need your help to spark excitement for citizen science and keep the momentum going!

The SciStarter Ambassador Program offers FREE training to volunteers ready to make an impact in their communities.

Ready to make a difference? Complete your application by March 14th to join the movement!