Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 27 additions & 16 deletions lib/screens/article_website.dart
Original file line number Diff line number Diff line change
Expand Up @@ -678,21 +678,25 @@ class ArticleWebsiteState extends State<ArticleWebsite> {

try {
pdfLink = await controller.evaluateJavascript(source: r"""
var directPdfLink = document.querySelector('a[href*="/doi/pdfdirect/"][href*="?download=true"]');
if (directPdfLink) {
return directPdfLink.href;
}

var link = document.querySelector('a.read-link[data-track-action="Download PDF"], a[data-track-label="PdfLink"], a.pdf-link, a[href*="/doi/pdf/"]');
if (link) {
return link.href;
}
link = document.querySelector('a[aria-label*="Download PDF"]');
if (link) {
return link.href;
}
return null;
""") as String?;
(function() {

var apsButton = document.querySelector('div.right a.sm-primary-button[href*="/pdf/"]');
if (apsButton) return apsButton.href;
var apsJournalLink = document.querySelector('a[href^="/prl/pdf/"], a[href^="/pra/pdf/"], a[href^="/prb/pdf/"], a[href^="/pre/pdf/"], a[href^="/prx/pdf/"]');
if (apsJournalLink) return apsJournalLink.href;

var directPdfLink = document.querySelector('a[href*="/doi/pdfdirect/"][href*="?download=true"]');
if (directPdfLink) return directPdfLink.href;

var link = document.querySelector('a.read-link[data-track-action="Download PDF"], a[data-track-label="PdfLink"], a.pdf-link, a[href*="/doi/pdf/"]');
if (link) return link.href;

var ariaLink = document.querySelector('a[aria-label*="Download PDF"]');
if (ariaLink) return ariaLink.href;

return null;
})();
""") as String?;

if (pdfLink == null || pdfLink.isEmpty) {
const int retries = 10;
Expand Down Expand Up @@ -939,8 +943,15 @@ class ArticleWebsiteState extends State<ArticleWebsite> {
logger.info(
'Full HTTP Request Headers being sent: $headers');

final client = http.Client();

final request = http.Request('GET', finalDownloadUri)
..headers.addAll(headers)
..followRedirects = true;

final streamedResponse = await client.send(request);
final response =
await http.get(finalDownloadUri, headers: headers);
await http.Response.fromStream(streamedResponse);

if (!mounted) {
logger.warning(
Expand Down
7 changes: 7 additions & 0 deletions lib/services/abstract_scraper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,13 @@ class AbstractScraper {
}
}
}
if (!output.abstract) {
let sectionAbstract = document.getElementById('abstract') || document.querySelector('section.abstract');
if (sectionAbstract) {
let inner = sectionAbstract.querySelector('.content, .abstract-text, .wrapper');
output.abstract = extractFullText(inner || sectionAbstract);
}
}

let abstractDiv = [...document.querySelectorAll('div, section')]
.find(el => /abstract/i.test(el.className) || /abstract/i.test(el.id));
Expand Down