https://github.com/vsuharnikov/sypexgeo-node
Unofficial Sypex Geo API bindings for Node.JS (Only Linux/MacOS, see #13)
https://github.com/vsuharnikov/sypexgeo-node
c-plus-plus nodejs sypexgeo
Last synced: about 1 month ago
JSON representation
Unofficial Sypex Geo API bindings for Node.JS (Only Linux/MacOS, see #13)
- Host: GitHub
- URL: https://github.com/vsuharnikov/sypexgeo-node
- Owner: vsuharnikov
- License: mit
- Created: 2012-11-19T09:11:27.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2018-10-27T12:13:38.000Z (over 6 years ago)
- Last Synced: 2025-04-30T20:07:49.928Z (about 1 month ago)
- Topics: c-plus-plus, nodejs, sypexgeo
- Language: C++
- Homepage:
- Size: 510 KB
- Stars: 6
- Watchers: 1
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.markdown
- License: LICENSE
Awesome Lists containing this project
README
Unofficial [Sypex Geo API](https://sypexgeo.net) bindings for Node.JS.
The latest version works only with:
* SypexGeo 2.2! See changelog.
* SxGeoCity_utf8 (See Gruntfile.js)## Getting Started
> Warning! This package [does not compile on Windows](#13).
### Requirements
* g++ >= 4.8 for supporting C++11.
### Setup
$ npm i --save sypexgeo-vyvid
### Using
```javascript
var sypex = require('sypexgeo-vyvid');
var geoDb = new sypex.Geo('/a/full/path/to/the/SypexGeoCity.dat');
var location = geoDb.find('46.148.53.103');console.log(JSON.stringify(location, null, ' '));
```## Documentation
### sypex.Geo
Creates an instance.
```javascript
var geoDb = new sypex.Geo('/var/www/geo/SypexGeoCity.dat');
```#### Parameters
1. {String} _filePath_ - A full path to the SypexGeo DB file.
2. **[deprecated]** {Number} _mode_ - Specifies a behaviour. Available only **SXGEO_MEMORY**.
**It will be removed in 0.3.0**The _mode_ is always **SXGEO_BATCH | SXGEO_MEMORY** regardless of arguments you pass in.
### find
Looks up for a location by its _IP_.
```javascript
var location = geoDb.find('46.148.53.103');console.log(JSON.stringify(location, null, ' '));
/** Output:
{
"latitude": 55.39485,
"longitude": 43.83992,
"country": {
"id": 185,
"iso": "RU",
"name": {
"en": "Russia",
"ru": "Россия"
}
},
"region": {
"id": 559838,
"iso": "RU-NIZ",
"name": {
"en": "Nizhegorodskaya Oblast'",
"ru": "Нижегородская область"
}
},
"city": {
"id": 580724,
"name": {
"en": "Arzamas",
"ru": "Арзамас"
}
}
}
**/
```#### Parameters
* {String} _ip_ - The IP-address, for example: **46.148.53.103**.
#### Returns
* {Object, null} - **null** if the database hasn't a location with a specified ip.
An object describes a found location:
* {Number} _longitude_ - **5** digits (e.g., **55.39485**) after the decimal point if the city is detected. Otherwise, **2** (e.g. **51.5**)
* {Number} _latitude_
* {Object} _country_
* {Number} _id_
* {String} _iso_
* {Object} _name_
* {String} en
* {String} ru
* **[optional]** {Object} _region_ - The information about a region. Omitted if wasn't detected
* {Number} _id_
* {String} _iso_
* {Object} _name_
* {String} en
* {String} ru
* **[optional]** {Object} city - The information about a city. Omitted if wasn't detected
* {Number} _id_
* {Object} _name_
* {String} en
* {String} ru### getCountryIso
Get a country ISO ([3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)) by its _IP_.
```javascript
var location = geoDb.getCountryIso('46.148.53.103');console.log(location); // Output: RU
```#### Parameters
* {String} _ip_ - The IP-address, for example: **46.148.53.103**.
### [deprecated] getCity
**The method will be removed in 0.3.0**.
```javascript
var city = geoDb.getCityFull('46.148.53.103');console.log(JSON.stringify(city, null, ' '));
/** Output:
{
"region": "Нижегородская область",
"country": "RU",
"name": "Арзамас",
"latitude": 55.39485,
"longitude": 43.83992
}
*/
```### [deprecated] getCityFull
**The method will be removed in 0.3.0**.
Alias to _getCity_.
### [deprecated] getCountry
**The method will be removed in 0.3.0**.
alias to _getCountryIso_.
## Grunt commands
* `grunt test` - run tests. Downloads a base if it necessary. At this time we have only JS-tests :)
* `grunt cpplint` - check a cpp code for some rules.## Contributing
* Please check your code by the command: `grunt cpplint`
* If you need a manual build, then run:```bash
npm run-script configure &&\
npm run-script build &&\
npm run-script test
```## Local development
1. Install cmake:
* macOS: `brew install cmake`
2. Install dependencies:
* `npm i` if you want to update `package-lock.json`;
* `npm ci` if not.### How to check a CPP version
```bash
cmake CMakeLists.txt &&\
make &&\
./sypexgeo_vyvid
```You will see the output:
```
=== City at 77.50.211.86 ===
Longitude: 100
Latitude: 60
Country id: 185
Country ISO: RU
Russian country name: Россия
English country name: Russia
Region id: 0
Region ISO:
Russian region name:
English region name:
City id: 0
Russian city name:
English city name:
...
```## Changelog
### 0.2.*
Works with SypexGeo 2.2.
* [-] The _fips_ field has been removed (removed from a database);
* [+] The _find_ and _getCountryIso_ methods have been added;
* [!] The _getCountry_, _getCity_ and _getCityFull_ now is deprecated;
* [!] Completely rewritten code;
* [!] Requires GCC 4.8.### 0.1.*
Works with SypexGeo 2.1.
* 0.1.1 - Ported to [Nan](https://github.com/rvagg/nan)
## License
Copyright by Vyatcheslav Suharnikov and contributors.
See contributors list in AUTHORS.
Licensed under the MIT license, see license text in LICENSE file.