/snp-api

An API wrapper for snpedia.com in Python/Flask.

Primary LanguagePython

#SNP-API ###The only SNPedia wrapper you'll ever need ###(maybe, if you needed one to begin with) This little program will cure all that ails you. Or at least allow you to be an awesome armchair geneticist! What started out as a way to scrape information from SNPedia.com for a client project turned into a side hobby of trying to see how much information I could pull using a handrolled API.

The little server is written in Python/Flask and it makes extensive use of the beautiful (and aptly named) BeautifulSoup web scraper. Each specified endpoint returns a JSON object. More endpoints may be added in the future, this is very much a work in progress.

##Installation: Clone the repository, create a virtual environment in the directory, and start using it:

git clone git@github.com:leaena/snp-api.git
cd snpedia-api
virtualenv venv --distribute
source venv/bin/activate

Then, install the required packages:

pip install -r requirements.txt

You're good to go. Start it with:

gunicorn server:app

##Getting Started:

Everything you know to use SNP-API (it's pretty straight-forward there are only two endpoints currently).

To get info on an RSID from the web version use /snp/api/{rsid}:

curl -i http:/127.0.0.1:5000/snp/api/rs15793179

The response:

HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 107
Server: Werkzeug/0.9.4 Python/2.7.5
Date: Sun, 26 Jan 2014 21:40:50 GMT

{
  "chromosome": "6",
  "position": "20347038",
  "rsid": "rs15793179",
  "trait": "A non-human snp."
}

And for a specific base pair with and rsid use /snp/api/{rsid}/{basepair}:

curl -i http://127.0.0.1:5000/snp/api/rs15793179/AA

The response:

HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 132
Server: Werkzeug/0.9.4 Python/2.7.5
Date: Sun, 26 Jan 2014 22:28:18 GMT

{
  "chromosome": "6",
  "genotype": "AA",
  "position": "20347038",
  "rsid": "rs15793179",
  "trait": "normal, for chickens"
}

As an aside, capitalization doesn't matter!

##TODOS:

  • More elegant way of handling general errors.
  • Find a way to notify if the specific base pair doesn't have an SNPedia entry yet.
  • Include more query types?
    • Include a search wrapper to find rsids by trait?
  • Hookup directly to 23andme API?
  • Heroku deploy? is that necessary?