ptt-scr
Version:
179 lines (144 loc) • 5.22 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _request = _interopRequireDefault(require("request"));
var _getUrlContent = _interopRequireDefault(require("./getUrlContent"));
var _cheerio = _interopRequireDefault(require("cheerio"));
var _url = require("url");
var _querystring = _interopRequireDefault(require("querystring"));
var request = _request.default.defaults();
var google = 'https://www.google.com';
var googleSearch = "".concat(google, "/search");
var site = '+site:ptt.cc';
var itemElector = 'div.g';
var linkSelector = 'h3.r a';
var descSelector = 'div.s span.st';
var nextSelector = 'td.b > a#pnnext';
var getSearchResultHTML =
/*#__PURE__*/
function () {
var _ref = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee(url) {
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _getUrlContent.default)(request, url.toString());
case 2:
return _context.abrupt("return", _context.sent);
case 3:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function getSearchResultHTML(_x) {
return _ref.apply(this, arguments);
};
}();
var getSearchUrl = function getSearchUrl(url, userName) {
url = new _url.URL(url); // const start = url.searchParams.get('start') || 0;
// console.log(start);
url.searchParams.set('q', "".concat(userName).concat(site));
url.searchParams.set('oq', "".concat(userName).concat(site));
url.searchParams.set('ie', 'UTF-8');
url.searchParams.set('lang', 'tw');
url.searchParams.set('tld', 'tw');
url.searchParams.set('sourceid', 'chrome'); // url.searchParams.set('start', start);
url.searchParams.set('num', 100); // console.log(url);
return url;
};
var parseHtml =
/*#__PURE__*/
function () {
var _ref2 = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee2(html, userName) {
var contents,
$,
_args2 = arguments;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
contents = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : [];
$ = _cheerio.default.load(html); // const next = $(nextSelector).attr('href');
// console.log(next);
// let nextLink = next && new URL(`${google}${next}`);
$(itemElector).each(function (i, ele) {
$ = $.load(ele);
var link = '';
var linkEle = $(linkSelector);
var descEle = $(descSelector);
var linkObj = _querystring.default.parse(linkEle.attr('href'));
var title = linkEle.text();
var text = descEle.text();
if (linkObj['/url?q']) {
link = linkObj['/url?q'];
} // console.log(i);
// console.log(title);
// console.log(link);
// console.log(text);
contents.push({
title: title,
link: link,
text: text
});
}); // if (nextLink) {
// nextLink = getSearchUrl(nextLink, userName);
// const nextHtml = await getSearchResultHTML(nextLink);
// return await parseHtml(nextHtml, userName, contents);
// }
return _context2.abrupt("return", contents);
case 4:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
return function parseHtml(_x2, _x3) {
return _ref2.apply(this, arguments);
};
}();
var _default =
/*#__PURE__*/
function () {
var _ref3 = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee3(userName) {
var googleSearchUrl, userGoogleHTML, contents;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
googleSearchUrl = getSearchUrl(new _url.URL(googleSearch), userName);
_context3.next = 3;
return getSearchResultHTML(googleSearchUrl);
case 3:
userGoogleHTML = _context3.sent;
_context3.next = 6;
return parseHtml(userGoogleHTML, userName);
case 6:
contents = _context3.sent;
return _context3.abrupt("return", contents);
case 8:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
return function (_x4) {
return _ref3.apply(this, arguments);
};
}();
exports.default = _default;