Skip to content

sem-con/sc-tawes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZAMG Weather Data

This Semantic Container provides data from measurements of automatic weather stations in Austria maintained by ZAMG.

Docker Image: https://hub.docker.com/r/semcon/sc-tawes

Usage

To get a general introduction to the use of Semantic Containers please refer to the SemCon Tutorial.
Start container locally:

$ docker pull semcon/sc-tawes
$ docker run -d -p 3000:3000 semcon/sc-tawes

Access data:

$ curl http://localhost:3000/api/data

Examples

This section lists examples how to use this Semantic Container.

Aggregate

Perform the following steps to build up a local weather archive.

  • start an empty container that accepts data in CSV format

    $ wget https://raw.githubusercontent.com/sem-con/sc-base/master/spec/fixtures/files/init_format_csv.trig
    $ docker run -d -p 3000:3000 semcon/sc-tawes /bin/init.sh "$(< init_format_csv.trig)"
    
  • setup a cron script to fetch data on an hourly basis (replace id=xyz with your actual location)

    $ (crontab -l; echo "0 * * * * curl https://vownyourdata.zamg.ac.at:9610/api/data/plain?id=xyz | curl -H "Content-Type: application/json" -d @- -X POST http://localhost:3000/api/data") | crontab
    

Billing

Semantic Containers support selling access to data. Perform the following steps to use this functionality:

  • start a dedicated billing service:
    a template is available on Github and Dockerhub; see also Swagger documentation

    $ docker run -d --name srv-billing -p 4800:3000 -v $PWD/key:/key --env-file .env semcon/srv-billing
    
  • start container with AUTH=billing:

    $ docker run -p 4000:3000 -d --name billing -e AUTH=billing --link srv-billing semcon/sc-base /bin/init.sh "$(< init.trig)"
    
  • access to container is restricted:

    $ curl -s http://localhost:4000/api/data | jq
    {
        "billing": {
            "payment-info": "...free text information...",
            "payment-methods": [ "Ether" ],
            "provider": "[email protected]",
            "provider-pubkey-id": "..."
        },
        "provision": {...},
        "validation": {...}
    }
    
  • request to buy data:
    provide information about buyer in buyer_info.json:

    {
        "buyer":"[email protected]",
        "buyer-pubkey-id":"...",
        "buyer-info":{ ... hash with additional information ... },
        "request":"option1=value1&option2=value2",
        "usage-policy":"...",
        "payment-method":"Ether",
        "signature":"...request signed with private GPG key and base64 encoded..."
    }
    

    and send request:

    $ curl -s -H "Content-Type: application/json" \
        -d "$(< buyer_info.json)" \
        -X POST http://localhost:4000/api/buy | jq
    {
        "billing": {
            "uid": "123..................................def",
            "signature": "...uid signed with private GPG key and base64 encoded...",
            "provider": "[email protected]",
            "provider-pubkey-id": "...",
            "offer-timestamp": "2019-01-02T03:04:05.678Z",
            "offer-info": "...free text information...",
            "payment-method": "Ether",
            "payment-address": "0x123..................................def",
            "cost": 0.123,
            "payment-info": "...free text information..."
        },
        "provision": {...},
        "validation": {...}
    }
    
  • confirm transaction and access data: transfer the stated cost and use the uid from above in the input field; confirm the payment by sending the transaction hash:

    $ curl -s "http://localhost:4000/api/paid?tx=0x123def" | jq
    {
        "key": "...oauth access key...",
        "secret": "...oauth secret encrypted with public key from buyer and base64 encoded..."
    }
    

    Base64 decode and decrypt the secret to retrieve the Oauth2 secret and request a token:

    $ curl -s -d grant_type=client_credentials \
      -d client_id=$OAUTH_KEY \
      -d client_secret=$OAUTH_SECRET \
      -d scope=read \
      -X POST http://localhost:4000/oauth/token
    

    And finally request the data:

    $ curl -s -H "Authorization: Bearer $OATH_TOKEN" "http://localhost:4000/api/data?option1=value1&option2=value2"
    

Improve this Semantic Container

Please report any bugs or feature requests in the GitHub Issue-Tracker and follow the Contributor Guidelines.

If you want to develop yourself, follow these steps:

  1. Fork it!
  2. Create a feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Send a pull request

 

Lizenz

MIT Lizenz 2019 - OwnYourData.eu