2017-04-16 4 views
1

#1917Liveの一部として、100年前のニューヨークタイムズのロシアに関する記事をつぶやくTwitterボットを作った。ノード:URLに奇妙なクエリ文字列があるURLから画像を取得

これは、記事を取得するために、ニューヨーク・タイムズのArticle Search APIを使用し、それらをつぶやきtwitを使用しています。

実際の新聞紙のように、つぶやきをもっと魅力的にしてみてください。そこで、見出しを読みやすくして、#1917Liveの一部であるユーザーにタグを付け、ハッシュタグを追加します。

ここに私が立ち往生している部分があります。各記事には、印刷時の見た目を示すpdfファイルのURLが付属しています。 Here's an example。私はそのpdfをダウンロードし、最初のページをイメージに変換し、そのイメージをツイートに添付したいと思います。これは、PDFを取得するために使用しようとした単純化されたコードです。

var http = require('http'); 
var fs = require('fs'); 

var url = "http://query.nytimes.com/mem/archive-free/pdf?res=9500E4DC153AE433A25756C1A9629C946696D6CF"; 

var file = fs.createWriteStream("file.pdf"); 
var request = http.get(url, function(response) { 
    response.pipe(file); 
}); 

これは機能しません。 .pdfというファイル拡張子を持つ通常のpdfファイルをダウンロードしようとしていたのであれば、問題はないと思う。しかし、これは異なっています。どんな助けも非常に高く評価されるでしょう。

+0

'アクセス制御の許可の原点 'ヘッダーが要求されたリソースに存在しません。 – guest271314

+0

エラーを印刷してみてください。 http://stackoverflow.com/a/22907134 – gaganshera

答えて

0

あなたはdata URI

let url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20data.uri%20where%20url%3D%22http%3A%2F%2Fquery.nytimes.com%2Fmem%2Farchive-free%2Fpdf%3Fres%3D9500E4DC153AE433A25756C1A9629C946696D6CF%22&format=json&callback="; 
 

 
fetch(url).then(response => response.json()) 
 
.then(({query:{results:{url}}}) => console.log(url)) 
 
.catch(err => console.log(err));

として成功した場合、 .pdfファイルになります、 JSON応答の "query"財産の "result"財産の "url"プロパティを取得、クエリの JSON結果を得るためにYQLを使用することができます

注:リソースはhtmldocumentで、.pdfではありません。。 .pdfのURLをhtmldocumentに取得するには、html.innerHTMLに設定して<template>と入力し、次に .srcというクエリを設定します。

のURLにも期限切れのヘッダーがあります。まだ未知の期間として403 (Forbidden)が応答として返されます。

let url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20data.uri%20where%20url%3D%22http%3A%2F%2Fquery.nytimes.com%2Fmem%2Farchive-free%2Fpdf%3Fres%3D9500E4DC153AE433A25756C1A9629C946696D6CF%22&format=json&callback="; 
 
let template = document.createElement("template"); 
 
fetch(url).then(response => response.json()) 
 
.then(({query:{results:{url}}}) => 
 
    fetch(url).then(res => res.text()) 
 
    .then(html => { 
 
    template.innerHTML = html;  
 
    let iframe = document.createElement("iframe"); 
 
    let src = template.content.querySelector("iframe").src; 
 
    console.log(src); 
 
    iframe.src = src.slice(0, src.indexOf("?")); 
 
    document.body.appendChild(iframe); 
 
    }) 
 
) 
 
.catch(err => console.log(err));

+0

'url'のリソースからの応答は、' .pdf' 'ドキュメント'を描画するように見える '