質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

542閲覧

複数APIの並列リクエストを、順次ブラウザに出力していく方法

zappy

総合スコア3

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2023/07/30 09:53

編集2023/08/01 04:45

実現したいこと

サイトAとBに並列でリクエストし、かつ、一方のレスポンスがきたら順次ブラウザに出力する方法は何が良いか知りたいです。

前提

自サイトに「サイトAからの検索」と「サイトBからの検索」を実装していて、これをなるべく早めたい、軽くしたい、という意図です。

発生している問題

良い方法がわかりません。

自分で考えたダメそうな方法1

並列でのAPI処理といえば、「Multi Curl」を思い浮かべます。
これは並列でAPIにリクエストは出せますが、しかしその結果をブラウザに順次出力するというのはできないのではと思っています。

もしできる方法がございましたら是非ご教示くださいませ。

自分で考えたダメそうな方法2

さらに調べて「Server Sent Events(SSE)」という方法を見つけました。
これはどうやらブラウザに順次出力することはできるようですが、しかし逆に並列でAPIにリクエストを出せないのではないかと思っています。

もしできる方法がございましたら是非ご教示くださいませ。

自分で考えた唯一できるが不安な方法

結局、並列リクエストと、順次出力、という2つをクリアするためには、JavaScript側で「サイトAからとってきてきてね」「サイトBからとってきてね」と並列のAjaxを実行するしかないかと思っています。
しかし、サイトAとBだけでなく、5個以上のサイトがありますので、サーバー側の負荷に不安を覚えています。

一応こういう感じを考えていますが・・・これしかないでしょうか。
もし負荷を減らす方法がございましたら是非ご教示くださいませ。

JavaScript

1const outputDiv = document.getElementById('output'); 2const urls = [ 3 'https://example.com/search/from-a', 4 'https://example.com/search/from-b' 5]; 6 7// 並列リクエストを実行する関数 8async function fetchUrls() { 9 const responses = await Promise.all( 10 urls.map(async (url, index) => { 11 const postData = (index === 0) ? 'apple' : 'orange'; 12 const response = await fetch(url, { 13 method: 'POST', 14 body: postData 15 }); 16 return await response.text(); 17 }) 18 ); 19 20 // レスポンスを順次表示 21 responses.forEach(response => { 22 const newLine = document.createElement('p'); 23 newLine.textContent = response; 24 outputDiv.appendChild(newLine); 25 }); 26} 27 28fetchUrls();

補足情報(FW/ツールのバージョンなど)

PHP は 8.2 で、フレームワークはなしです。
JavaScript は Vanilla JS で考えています。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2023/07/31 01:30

『サーバー側の負荷』というのは、たとえば『サイトAとB』などのサーバの負荷をご心配されているということですか? 『5個以上のサイト』はそれぞれ別のサーバなのではないか、それならば同じサーバにアクセスを5回以上行うわけではないからそれほど心配はいらない、と思っているのですが、これは違いますか?
zappy

2023/07/31 12:36

ありがとうございます。 いえ、自サイトの負荷です。 以下は ② の方が自サイトの負荷が軽くて済むと考えていました。 ➀ JavaScript から自サイトへ5回のリクエストを受けて、cURL で外部サイトにリクエストを出す ② JavaScript から自サイトへ1回のリクエストを受けて、Multi Curl で5つの外部サイトにリクエストを出す しかし ② の Multi Curl は順次出力ができなそうで困ってしまった。という経緯になります。 尚、『5個以上のサイト』はそれぞれ別のサーバというのはその通りです。別の会社の別のサイトです。
Lhankor_Mhy

2023/08/01 00:39

なるほど、ご提示のコードだと『自サイトへのリクエスト』が書かれていませんが、あくまで参考ということで実際のコードとは異なるのですね。理解しました。
guest

回答1

0

サーバーサイドでAPIを用意して、要求に応じてスクレイピングしたサイトを返すだけです。
jsではfetchを随時発行して結果を表示領域に追記していけばよいでしょう

投稿2023/07/31 02:01

yambejp

総合スコア117755

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zappy

2023/07/31 12:38

なるほど。やはりその方法になりますか。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問