When a user clicks on a link to a file (i.e. requests a download) from a Repository with the tracker protocol in operation, if the HTTP Status code is 200 or 304, an OpenURL log entry is sent to a remote server for further processing.
Constructing the OpenURL log entry
The OpenURL log entry should be based on a subset of the NISO OpenURL 1.0 standard KEV ContextObject Format. The OpenURL string values must be URL encoded, with key-value pairs separated by an ampersand (&)
||OpenURL Value (example)
||Identifies data as OpenURL 1.0. String constant: Z39.88-2004 (Mandatory)
|Usage event datestamp
||Date/time of usage event (Mandatory)
|Client IP address
||IP Address of the client requesting the article (Mandatory)
||The UserAgent is used to identify and eliminate, by applying COUNTER rules, accesses by robots/spiders (Mandatory)
||Permits explicit identification of a user session offering greater accuracy over inferred sessions based on IP & UserAgent (Optional)
|Item OAI identifier
||(Mandatory) The HTTP header field that identifies the address of the webpage (i.e. the URI) that linked to the resource being requested, which is used to help identify and eliminate accesses by robots/spiders
Information about Robot downloads need not be transmitted to the remote server. Before attempting to transmit the OpenURL, a check may be carried out to eliminate robots as defined in the COUNTER official list, updated in Oct 2016, available as a series of user-agent regexes in a text file at Appendix J: List of internet robots, crawlers and spiders
Checking against these regexes should be case insensitive.
Once the OpenURL has been constructed, it will need to be transmitted to a remote server where it will be stored and processed.
If the transmission is successful the remote server will return a 200 OK code.
If the transmission is not successful, e.g. a 4xx or 5xx code is returned, the OpenURL string should be queued for processing later, e.g. appended to a file held on the local server. A script, that can be scheduled to run periodically, should check if there are queued entries and, if there are, re-transmit them.