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

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

新規登録して質問してみよう
ただいま回答率
85.44%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

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

API

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

Q&A

解決済

3回答

1943閲覧

TwitterAPIが普通のJavaScriptでは使えないのは何故でしょうか?

tetatetu

総合スコア26

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

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

API

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

0グッド

3クリップ

投稿2021/04/09 03:11

編集2021/04/09 05:31

Twitter APIについて質問させていただきたく、質問させていただきます。
JavaScriptでTwitterAPIを使ってツイートを取得したりツイートするアプリケーションを作る方法を調べると、普通のJavaScriptではなく、Node.jsやGoogleAppsScript(GAS)を使う記事が出てきます。「TwitterAPIは普通のJavaScriptでは使えず、Node.jsやGASでしか使えない」ということが暗黙知となっているように思うのですが、その理由といいますか、仕組みがいまいちよく分からず、それを知っておきたいと思います。

Node.jsについての理解ですが、このサイトによると、**「JavaScriptはプログラム言語そのもので、Node.jsはJavaScriptの処理系」「C++で言うところのGCCに相当する」**ということで、そのように理解しております。しかし、JavaScriptの処理系は既にChromeなどのブラウザに用意されていて、普段は当たり前のようにデバッグなどに使っているし、node.jsを使う必要性はどこにあるのか、にわかには分かりませんでした。

素人なりに類推するに、**「Chromeのようなブラウザに用意された既定のJavaScript処理系は、恐らくセキュリティーの観点から外部との通信方式に一部の制限を設けていて、それのせいでTwitterAPIを利用することが出来ない。その束縛から逃れるためには、Node.jsやGASなどを使って独自に通信を定義してやる必要がある」**ということかと思っております。
このサイトの記事では、Google Apps ScriptでTwitterAPIを利用していますが、以下のTwitterAPIにアクセスするための準備のコードでは、OAuth認証を行っています:

// 認証用URL取得 function getOAuthURL() { Logger.log(getService().authorize()); } // サービス取得 function getService() { return OAuth1.createService('Twitter') .setAccessTokenUrl('https://api.twitter.com/oauth/access_token') .setRequestTokenUrl('https://api.twitter.com/oauth/request_token') .setAuthorizationUrl('https://api.twitter.com/oauth/authorize') // 設定した認証情報をセット .setConsumerKey(PropertiesService.getScriptProperties().getProperty("CONSUMER_API_KEY")) .setConsumerSecret(PropertiesService.getScriptProperties().getProperty("CONSUMER_API_SECRET")) .setCallbackFunction('authCallback') // 認証情報をプロパティストアにセット(これにより認証解除するまで再認証が不要になる) .setPropertyStore(PropertiesService.getUserProperties()); } // 認証成功時に呼び出される処理を定義 function authCallback(request) { var service = getService(); var authorized = service.handleCallback(request); if (authorized) { return HtmlService.createHtmlOutput('success!!'); } else { return HtmlService.createHtmlOutput('failed'); } }

憶測ですが、このOAth認証というものにおいて使われる通信方式が、Chromeのようなブラウザ標準装備のJavaScript処理系では利用できない仕様になっているのかもしれない、と考えています。

実際のところは、どういう理由から普通のJavaScriptでは利用できないのでしょうか?
ご回答よろしくお願い致します。

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

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

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

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

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

m.ts10806

2021/04/09 05:04

>初歩的な質問かもしれませんが 書かれてる人多いですが、書く必要はないと思います。 あそこまでブチ切れるのは異常としても、「初歩だとわかってるなら(自分で判断できるなら)自分で解決できるんでない?」と感じるのが赤の他人ですので、無用な配慮です。
tetatetu

2021/04/09 05:20

ご指摘ありがとうございます。今後の質問投稿の参考にさせていただきます。
m.ts10806

2021/04/09 05:25

ひとまず、現質問から対応されては。細かいですが「今後」「以後」は「現在」も含みます。
tetatetu

2021/04/09 05:33

「初歩的な質問かもしれませんが」という冒頭の文言を削除させて頂きました。ありがとうございます。
guest

回答3

0

他のご回答のような理由もありますが、それでもあえてやろうとしても下記の理由によりブロックされます。


Chromeのようなブラウザに用意された既定のJavaScript処理系は、恐らくセキュリティーの観点から外部との通信方式に一部の制限を設けていて、それのせいでTwitterAPIを利用することが出来ない。

ご推察の通りです。ブラウザ上のJavaScriptを使ったAPIのリクエストは、サーバ側が許可をしない限り同じドメインのものでないと受け付けないようになっています。
つまり、ブラウザ上のJavaScriptからtwitterAPIを使うには、twitter.com上で実行する必要があります。

異なるオリジンへのネットワークアクセス | 同一オリジンポリシー - Web セキュリティ | MDN

オリジン間リソース共有 (CORS) - HTTP | MDN

投稿2021/04/09 04:53

Lhankor_Mhy

総合スコア36254

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

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

tetatetu

2021/04/09 05:35

ご回答ありがとうございます。参考にさせていただきます。
guest

0

ベストアンサー

技術的にはやろうと思えばできないことはないと思うのですが、API KeyやAPI key secretなどの情報がバレバレになってしまうので、無理にやったところで外部の人からやりたい放題されてしまうからだと思います。技術的にではなく、実質的にできない(やってはいけない)ということだと思います。

投稿2021/04/09 03:22

AbeTakashi

総合スコア4677

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

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

tetatetu

2021/04/09 03:55 編集

ご回答ありがとうございます。 Node.jsで書いたソースコードは外部から覗くことが出来ないように出来るが、JavaScriptファイルに書かれたソースコードは簡単に覗くことができてしまう、ということでしょうか? 確かに、ブラウザの開発者ツールのSourcesタブを見ると、サーバーに置かれているソースコードを覗けることがありますね。
AbeTakashi

2021/04/09 04:00

基本はその通りかと思います。これを無理やり回避する方法があるのかもしれませんが、かなりの知識や技術を要すると思います(私には分からない)。そこまでするなら1台サーバを用意した方が圧倒的に楽です。
tetatetu

2021/04/09 04:14

なるほど。そもそもJavaScriptはクライアント側(ブラウザ)で実行するプログラム言語だから、必然的にソースコードはクライアントにダウンロードされて閲覧可能にしてしまう →Node.jsの場合はサーバーサイドの処理系なので、サーバーの設定によってjsファイルを外部から閲覧不可にするなどの手段を講じることが出来る ということですね。 よく分かりました、ご回答ありがとうございます。
tetatetu

2021/04/09 04:46

すみません。最終的には自己問答のような形で解決するに至りましたが、それが出来たのも、質問文を考える中で自然と頭の整理が出来、さらにTakashi Abe様に頂いたヒントなどがあったからこそ、と思っております。「質問を立てたからこそ解決できた」「全てわかった上で他意があって質問したわけではない」ということをご理解して頂ければ幸いです。
guest

0

ブラウザで表示してるhtmlやjsは外から見える。
プログラミング以前にユーザーとしてブラウザを使ってるうちに身に付けること。

みんな知ってて当然の常識なのでこんなレベルの話は誰もしてない。

今の初心者に足りないのはユーザーとしての経験。ユーザー視点のない人が作る側になることは絶対に不可能。

投稿2021/04/09 03:45

kawax

総合スコア10377

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

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

tetatetu

2021/04/09 05:41

ご回答ありがとうございます。参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問