Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/arnm/vine-api
Vine API Clojure Library
https://github.com/arnm/vine-api
Last synced: 3 months ago
JSON representation
Vine API Clojure Library
- Host: GitHub
- URL: https://github.com/arnm/vine-api
- Owner: arnm
- License: epl-1.0
- Archived: true
- Created: 2015-02-13T05:27:18.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-02-22T18:28:59.000Z (over 9 years ago)
- Last Synced: 2024-05-22T18:31:04.911Z (6 months ago)
- Language: Clojure
- Size: 188 KB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# vine-api
A Clojure library designed to wrap the [Unofficial Private Vine API](https://github.com/VineAPI/VineAPI/blob/master/endpoints.md). This library was built using [http-kit](https://github.com/http-kit/http-kit). All of the API functions defined in this library are light wrappers around the [http-kit client functions](http://www.http-kit.org/client.html).
## Usage
[![Clojars Project](http://clojars.org/com.alexeinunez/vine-api/latest-version.svg)](http://clojars.org/com.alexeinunez/vine-api)
### Function Naming Convention
All supported API functions can be found in [here](https://github.com/arnm/vine-api/blob/master/src/vine/api.clj).
The function names are generated based on the resource path given to the ```def-vine-endpoint``` macro.
For example, when the resource path ```posts/search/``` is passed to the macro it generates this function:
``` clojure
vine.api/posts-search-query
([method query & [opts callback]] [method query & [callback]])
Requests https://vine.co/api/posts/search/.
```which can be called like this:
``` clojure
(ns sample.core
(:require [vine.api :as v]))@(v/post-search-query :get "my query")
```Learning from the [unit tests](https://github.com/arnm/vine-api/blob/master/test/vine/test/api.clj) is highly recommended, as they will demostrate how most functions can be used.
### Authentication
A good portion of the Vine API requires for requests to be authenticated for a user. This can be done by setting the ```vine-session-id``` request header which should have the value of the ```key``` field provided when a user logs on.
Logging in a user:
``` clojure
(ns sample.core
(:require [vine.api :as v]))@(v/users-authenticate :post
{:form-params
{:username "user-email"
:password "user-password"}})
```This will return a map with a ```:body``` key which contains a string with the JSON response:
``` json
{
"code": "",
"data": {
"username": "username",
"edition": "US",
"userId": 1234859230,
"key": "34720342-59834-2-23-49kl",
"avatarUrl": "http://v.cdn.vine.co/avatars/default.png"
},
"success": true,
"error": ""
}
```The ```key``` field value is what you want to set the ```vine-session-id``` header to.
Here is an example of making an authenticated request:
``` clojure
(ns sample.core
(:require [vine.api :as v]));; ...
;; login was done previously@(v/timelines-graph :get {:headers {"vine-session-id" "34720342-59834-2-23-49kl"}})
```### Synchronous Calls
Use futures to make synchronous requests:
``` clojure
(ns sample.core
(:require [vine.api :as v]))(println @(v/timelines-popular :get {:query-params {:size 1}}))
```
Prints out response map from request to https://vine.co/api/timelines/popular?size=1### Asynchronous Calls
Use callbacks to make asynchronous requests:
``` clojure
(ns sample.core
(:require [vine.api :as v]))(v/venues-search-query :get "texas" (fn [r] (println (:status r))))
```
Prints out status code of request to https://vine.co/api/venues/search/texas## Development
If you want work on the library you will have to run Leiningen with the development profile specified in the ```project.clj```:
``` bash
# run the REPL
lein with-profile +d repl
# run the tests
lein with-profile +d test
```You will also have to specify a local ```profiles.clj``` inside of the repo root so that you can specify your test data. This functionality is added by the [Environ](https://github.com/weavejester/environ) Leiningen plugin.
Here is a sample ```profiles.clj``` which has all valid data except for the user login credentials:
``` clojure
{:dev {:env {:username "bob"
:email "[email protected]"
:password "pass"
:user-id "955681242773340160"
:post-id "1178768651474640896"
:channel-id "1070175184667013120"
:venue-id "4e72b98a62e1a77aac80bb04"}}}
```You repo directory should look something similar to this:
```
↳ tree
.
├── LICENSE
├── README.md
├── doc
│ └── intro.md
├── pom.xml
├── pom.xml.asc
├── profiles.clj
├── project.clj
├── src
│ └── vine
│ ├── api.clj
│ └── util
│ └── http.clj
└── test
└── vine
└── test
└── api.clj7 directories, 10 files
```