少し前、私はクライアントのために働いていて、彼らのウェブサイトにビデオレビューを統合していました。やる気のある開発者が新しい問題を解決するのと同じように、私が最初にしたことはGoogleでした。まったく異なる、または時代遅れで保守されていないPythonパッケージを実現する方法について、役に立たない、または誤った答えがたくさん見つかりました。最終的に、私は弾丸とチームを噛み、すべてをゼロから構築しました。ビューを作成し、GoogleのAPIについて学び、APIクライアントを作成し、最終的にDjangoからプログラムで動画をアップロードすることに成功しました。
この投稿では、DjangoアプリからYouTube動画を投稿する方法を段階的に説明します。これには、Google API認証情報を少し試す必要があります。最初にウェブインターフェースを使用し、次にコードを使用します。 YouTubeの部分自体は非常に簡単です。 Googleのものがどのように機能するかを理解する必要があります。これは、トリッキーで情報がさまざまな場所に分散している場合があるためです。
前提条件
作業を開始する前に、次のことをよく理解しておくことをお勧めします。
注意すべき興味深いコードは、次のPythonスニペットです。 Google YouTubeAPIドキュメント :
# Sample python code for videos.insert def videos_insert(client, properties, media_file, **kwargs): resource = build_resource(properties) # See full sample for function kwargs = remove_empty_kwargs(**kwargs) # See full sample for function request = client.videos().insert( body=resource, media_body=MediaFileUpload(media_file, chunksize=-1, resumable=True), **kwargs ) # See full sample for function return resumable_upload(request, 'video', 'insert') media_file = 'sample_video.flv' if not os.path.exists(media_file): exit('Please specify a valid file location.') videos_insert(client, {'snippet.categoryId': '22', 'snippet.defaultLanguage': '', 'snippet.description': 'Description of uploaded video.', 'snippet.tags[]': '', 'snippet.title': 'Test video upload', 'status.embeddable': '', 'status.license': '', 'status.privacyStatus': 'private', 'status.publicStatsViewable': ''}, media_file, part='snippet,status')
前提条件を読んだら、始めましょう。必要なものを見てみましょう。
基本的に、仮想環境を作成しましょう。私は個人的に好きです pyenv 。両方の設定はこの投稿の範囲外なので、以下にいくつかのpyenvコマンドを投稿します。好みがvirtualenv
の場合は、それに応じてコマンドを自由に置き換えてください。
この投稿では、Python3.7とDjango2.1を使用します。
➜ ~/projects $ mkdir django-youtube ➜ ~/projects $ cd django-youtube ➜ ~/projects/django-youtube $ pyenv virtualenv 3.7.0 djangoyt ➜ ~/projects/django-youtube $ vim .python-version
これをコンテンツに入れましょう(pyenvを使用している場合は、フォルダーに入ると自動的にアクティブになります)。
djangoyt
依存関係のインストール:
回避するオープンソースライセンス
➜ ~/projects/django-youtube $ pip install google-api-python-client google-auth google-auth-oauthlib google-auth-httplib2 oauth2client Django unipath jsonpickle
では、djangoプロジェクトを開始しましょう。
➜ ~/projects/django-youtube $ django-admin startproject django_youtube .
Google APIを使用できるように、プロジェクトの認証情報を構成しましょう。
手順1.次のURLに移動します。
https://console.developers.google.com/apis/library/youtube.googleapis.com
ステップ2.新しいプロジェクトを作成します。
手順3. [APIとサービスを有効にする]をクリックします。
手順4.YouTube Data API v3を探し、[有効にする]をクリックします。
ステップ5.資格情報に関するメッセージが表示されます。
ステップ6.右側の[資格情報の作成]青いボタンをクリックすると、次の画面が表示されます。
c-corporationとは
ステップ7.Webサーバー、ユーザーデータを選択します。
手順8.承認されたJSオリジンとリダイレクトURIを追加します。最後まで続けます:
OK、認証情報の設定は完了です。資格情報をJSON形式でダウンロードするか、コピーすることができます クライアントID そして クライアントシークレット 。
最初のDjangoアプリを始めましょう。私は通常それを「コア」と名付けます:
(djangoyt) ➜ ~/projects/django-youtube $ python manage.py startapp core
次に、ルートurls.pyファイルに以下を追加して、ホームページリクエストをコアアプリにルーティングします。
# /urls.py from django.urls import path, include path('', include(('core.urls', 'core'), namespace='core')),
コアアプリで、別のurls.pyファイルを作成し、いくつかの構成も行います。
# core/urls.py from django.conf import settings from django.conf.urls.static import static from django.urls import path from .views import HomePageView urlpatterns = [ path('', HomePageView.as_view(), name='home') ] if settings.DEBUG: urlpatterns += static( settings.STATIC_URL, document_root=settings.STATIC_ROOT) urlpatterns += static( settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
HomePageView
を指す空のパスがあることを確認してください。コードを追加します。
簡単なTemplateView
をしましょうそれが実行されているのを見るだけです。
# core/views.py from django.shortcuts import render from django.views.generic import TemplateView class HomePageView(TemplateView): template_name = 'core/home.html'
そしてもちろん、基本的なテンプレートが必要です。
# core/templates/core/home.html Here is the form:
モノのスマートホームインターネット
{% csrf_token %} {{ form.as_p }}
YouTubeFormにビデオフィールドを追加することを忘れないでください:
class YouTubeForm(forms.Form): video = forms.FileField()
さあ!
次に、YouTubeアカウントのスタジオページで確認します(チャンネルを用意することが重要です)。
ここは!
コードには多少の改善が必要ですが、それは良い出発点です。それがGoogleのほとんどに役立つことを願っています YouTube API 統合の問題。注意すべき重要な点がいくつかあります。
invalid_grant
を受信し始めます。反応。すでにクライアントを承認した同じユーザーを再承認しても、更新トークンは保証されません。 Googleアカウントページでアプリケーションを取り消してから、承認プロセスを再度実行する必要があります。場合によっては、トークンを更新し続けるためにタスクを実行する必要があります。
アップロードには時間がかかり、メインのアプリケーションプロセスでアップロードを行うと、アップロード中にアプリケーション全体がブロックされる可能性があります。正しい方法は、それを独自のプロセスに移動し、非同期でアップロードを処理することです。
混乱していますか?しないでください、続きを読む Python用Celeryでのバックグラウンドジョブワークフローの調整 。
公式ウェブサイトから:「Djangoは、迅速な開発とクリーンで実用的なデザインを促進する高レベルのPythonWebフレームワークです」。これは最大のPythonWebフレームワークであり、テンプレート作成、データベース処理、セキュリティなど、高速なWeb開発のためのツールを提供するため広く使用されています。
間違いなく。これは最も人気があり、トップフレームワークの1つです。 Djangoは、一般的なWebタスクのほとんどを処理するため、アプリケーションに集中できます。 Webプロジェクトを開始するときにPython開発者に3つの選択肢を与えると、Djangoは確かに1つになります。
これは、特定のサイトにあらゆる種類のYouTube機能を含めるためにGoogleが提供するAPIです。これには、動画のアップロード、再生リストとサブスクリプションの管理、チャンネル設定の処理、検索などが含まれます。
最初のステップはここ(https://developers.google.com/youtube/v3/)に移動することですが、それによってGoogle Developers Console(https://console.developers.google.com/)に移動します。 。そこで、YoutubeAPIを検索して追加できます。
SpringBootグローバル例外ハンドラ
無料のGoogleAPIもあれば、そうでないものもあります。たとえば、Youtube DataAPIは無料です。
この投稿に厳密に従うには、Python3.7とDjango2.1が必要ですが、これはPython 2.7、3.4、3.5、3.6、Django 1.1、2.0でも機能するはずです。
YouTubeアカウントと少なくとも1つのチャンネルが必要です。