私は人のツイートを受け取り、画像が含まれている場合はダウンロードします。
私はこのURLから画像をダウンロードすることができますなぜ (例1)このURLから
http://www.google.co.id/intl/en_com/images/logo_plain.png
そしてません(例2)
https://www.google.com/imgres?imgurl=https://pbs.twimg.com/media/DR-kkH4XcAAQ-vc.jpg&imgrefurl=https://twitter.com/officialmcafee/status/945655402276024320&h=1200&w=992&tbnid=0q3B6ZB_UxjRIM&tbnh=247&tbnw=204&usg=__xvjbjSSMvuImESBLVvBBrUagUe8=&docid=vdqkoUmaefYoFM
例#1libcurlでTwitterから画像をダウンロードするC++
#include <iostream>
#include <curl/curl.h>
using namespace std;
int main()
{
CURL *image;
CURLcode imgresult;
FILE *fp = nullptr;
const char *url = "http://www.google.co.id/intl/en_com/images/logo_plain.png";
image = curl_easy_init();
if (image)
{
// Open file
fp = fopen("img.png", "wb");
if (fp == NULL) cout << "File cannot be opened";
curl_easy_setopt(image, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(image, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(image, CURLOPT_URL, url);
// Grab image
imgresult = curl_easy_perform(image);
if (imgresult)
cout << "Cannot grab the image!\n";
}
// Clean up the resources
curl_easy_cleanup(image);
// Close the file
fclose(fp);
system("pause");
return 0;
}
例2
#include <iostream>
#include <curl/curl.h>
using namespace std;
int main()
{
CURL *image;
CURLcode imgresult;
FILE *fp = nullptr;
const char *url = "https://www.google.com/imgres?imgurl=https://pbs.twimg.com/media/DR-kkH4XcAAQ-vc.jpg&imgrefurl=https://twitter.com/officialmcafee/status/945655402276024320&h=1200&w=992&tbnid=0q3B6ZB_UxjRIM&tbnh=247&tbnw=204&usg=__xvjbjSSMvuImESBLVvBBrUagUe8=&docid=vdqkoUmaefYoFM";
image = curl_easy_init();
if (image)
{
// Open file
fp = fopen("img.png", "wb");
if (fp == NULL) cout << "File cannot be opened";
curl_easy_setopt(image, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(image, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(image, CURLOPT_URL, url);
// Grab image
imgresult = curl_easy_perform(image);
if (imgresult)
cout << "Cannot grab the image!\n";
}
// Clean up the resources
curl_easy_cleanup(image);
// Close the file
fclose(fp);
system("pause");
return 0;
}
Googleから明らかに「HTTP」リダイレクトを取得している可能性が高いためです。 libcurlに精通していないが、 'HTTP'リダイレクトに自動的に従うように設定できるオプションがある可能性があります。そうでない場合は、Googleの応答から実際のURLを抽出し、実際のURLからダウンロードしようとするより多くの作業をしなければなりません。 –
@SamVarshavchikしかし、元の画像のアドレスを使用しても、https://pbs.twimg.com/media/DR-kkH4XcAAQ-vc.jpgはまだ動作しません。 – user9143463
私は何の問題もありませんでした。 curlコマンドラインクライアントを使用して、コメントに含まれているURLから画像をダウンロードします。私が言ったように、私はlibcurlに精通していません。簡単なGoogleの検索でlibcurlのドキュメントが見つかりました。そして、 'curl_easy_setopt()'のドキュメントを読んでコードを見ると、何もダウンロードしないのは明らかです。それはあなたがライブラリにするように言ったものです。何もダウンロードしません。 'CURLOPT_WRITEFUNCTION'を' NULL'に設定します。あなたがダウンロードしたすべてのものを無視するようにライブラリに指示したようです(書き込み機能はありません)。それで何が起こると思いますか? –