UNPKG

untappd

Version:
52 lines (51 loc) 2.72 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const request_1 = __importDefault(require("request")); const cheerio_1 = __importDefault(require("cheerio")); const Beer_1 = require("../models/Beer"); exports.fetchRecentBeers = (username, callback) => { fetchBeers(username, '/beers?filter_type=type&filter_id=all&sort=', beers => { callback(beers); }); }; exports.fetchMostFrequentBeers = (username, callback) => { fetchBeers(username, '/beers?filter_type=type&filter_id=all&sort=checkin', beers => { callback(beers); }); }; exports.fetchHighestRatedBeers = (username, callback) => { fetchBeers(username, '/beers?filter_type=type&filter_id=all&sort=highest_rated_you', beers => { callback(beers); }); }; var fetchBeers = (username, sort, callback) => { const profileUrl = `https://untappd.com/user/${username}`; request_1.default(profileUrl + sort, (error, response, body) => { if (error) throw error; const $ = cheerio_1.default.load(body); const recentBeers = []; $('.beer-item').each((order, thisBeer) => { const beer = $(thisBeer); const beerName = beer.find('.name').text(); const beerBrewery = beer.find('.brewery').text(); const beerStyle = beer.find('.style').text(); const beerAbv = Number(beer.find('.abv').text().trim().match(/^[0-9.]+/g)[0]); const beerIbuUnformatted = beer.find('.ibu').text().trim(); const beerIbu = beerIbuUnformatted === null ? 0 : Number(beerIbuUnformatted.match(/\d+/)); const beerDateFirst = beer.find('.date > a[data-href=":firstCheckin"] > abbr').text(); const beerDateRecent = beer.find('.date > a[data-href=":recentCheckin"] > abbr').text(); const beerCheckins = Number(beer.find('.check-ins').text().match(/\d+/)[0]) || 0; const beerRating = Number(beer.find('.ratings > .you > p').text().match(/\d?\.?\d+/)); // Can't chain the below for some reason. Might be a cheerio oddity const prelimGlobalRating = beer.find('.ratings > .you > p')[1]; const ratingArray = $(prelimGlobalRating).text().match(/\d+?\.?\d+/); const beerGlobalRating = (ratingArray == null) ? 0.00 : Number(ratingArray[0]); recentBeers.push(new Beer_1.Beer(order + 1, beerName, beerBrewery, beerStyle, beerAbv, beerIbu, beerDateFirst, beerDateRecent, beerCheckins, beerRating, beerGlobalRating)); }); callback(recentBeers); }); };