2013-10-18 18 views
12

Mục tiêu của nhiệm vụ của tôi là tạo tập lệnh bảng điều khiển, sẽ chèn video mới tải lên trên trang web của riêng tôi vào kênh Youtube của riêng tôi. Tôi muốn sử dụng xác thực máy chủ đến máy chủ nhưng YoutubeApi không hỗ trợ cách xác thực này ngay bây giờ.Tải video lên kênh Youtube của tôi mà không cần xác thực người dùng bằng YoutubeApi v3 và ouath2

Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể tải video lên kênh youtube, sử dụng xác thực oauth2 với bảng điều khiển tập lệnh mà không cần sự trợ giúp của người dùng? Có cách nào để làm điều này mà không sử dụng giao thức xác thực ClientLogin không được chấp nhận?

+0

Đã thêm video vào câu trả lời của tôi bên dưới. –

Trả lời

9

Có phân khúc này giải thích làm thế nào để: https://developers.google.com/youtube/v3/guides/moving_to_oauth#standalone

Về cơ bản, bạn đi qua một lần và lưu token từ đó.

Nếu bạn thậm chí muốn bỏ qua một lần, bạn có thể nhận mã thông báo làm mới ở OAuth2 Playground với phạm vi được tôn trọng và cắm trực tiếp vào mã của bạn, với id và bí mật của khách hàng. Bằng cách đó, tập lệnh của bạn sẽ không cần trình duyệt web.

Here's the video explaining this workflow step-by-step.

+0

Cảm ơn bạn đã trả lời, tôi sẽ cố gắng sử dụng OAuth2 Playground và tôi sẽ giúp bạn. Tôi nói với bạn thay vì giải pháp của bạn giúp tôi hay không. –

+0

Cảm ơn bạn đã giải pháp. –

+0

Đã thêm video vào câu trả lời của tôi. –

1

Sau khi đĩa với nhà phát triển YoutubeAPI, chúng tôi đã nhận giải pháp đó: CNTT không thể làm của riêng máy chủ đến máy chủ ứng dụng mà không sử dụng KHÔNG DÙNG NỮA ** ** ClientLogin Auth Nghị định thư Nó sẽ không được dùng nữa trên tháng 4 năm 2014 (nhưng cho đến tháng 4 bạn có thể sử dụng). Vì vậy, nếu bạn muốn người dùng tải video lên kênh YT từ trang web của mình, bạn nên làm việc theo cách như sau: - Người dùng của bạn tải video lên trang web của bạn - Bạn (hoặc ai đó có YT của bạn) thông tin đăng nhập tài khoản) nhập video vào kênh YT của bạn Để giải quyết vấn đề này, bạn có thể dễ dàng sử dụng Giao thức OAuth2.

+1

mặc dù được chấp nhận làm câu trả lời đúng. Cái này sai! – pinoyyid

+0

@pinoyyid bạn có thể chứng minh điều đó bằng các liên kết không? –

+0

có. câu trả lời ở trên với 4 upvotes – pinoyyid

1

đây là một kịch bản để tải lên một đoạn video qua curl

# WARNING, this works only with GNU grep, if you run this on a mac replace grep with ggrep after 'brew install grep' 
# Store our credentials in our home directory with a file called .<script name> 
my_creds=.`basename $0` 
client_id='YOURCLIENTID' 
client_secret='YOURCLIENTSECRET' # really a secret 
if [ -s $my_creds ]; then 
    # if we already have a token stored, use it 
    . $my_creds 
    time_now=`date +%s` 
else 
    scope='https://www.googleapis.com/auth/youtube' 

    # Form the request URL 
    auth_url="https://accounts.google.com/o/oauth2/auth?client_id=$client_id&scope=$scope&response_type=code&redirect_uri=urn:ietf:wg:oauth:2.0:oob" 

    echo "Please go to:" 
    echo 
    echo "$auth_url" 
    echo 
    echo "after accepting, enter the code you are given:" 
    read auth_code 

    # swap authorization code for access and refresh tokens 
    auth_result=$(curl -s https://accounts.google.com/o/oauth2/token \ 
    -H "Content-Type: application/x-www-form-urlencoded" \ 
    -d code=$auth_code \ 
    -d client_id=$client_id \ 
    -d client_secret=$client_secret \ 
    -d redirect_uri=urn:ietf:wg:oauth:2.0:oob \ 
    -d grant_type=authorization_code) 

    echo COMPLETE ANSWER WAS: 
    echo $auth_result 

    access_token=$(echo "$auth_result" | \ 
       ggrep -Po '"access_token" *: *.*?[^\\]",' | \ 
       awk -F'"' '{ print $4 }') 
    refresh_token=$(echo "$auth_result" | \ 
       ggrep -Po '"refresh_token" *: *.*?[^\\]",*' | \ 
       awk -F'"' '{ print $4 }') 
    expires_in=$(echo "$auth_result" | \ 
       ggrep -Po '"expires_in" *: *.*' | \ 
       awk -F' ' '{ print $3 }' | awk -F',' '{ print $1}') 
    time_now=`date +%s` 
    expires_at=$((time_now + expires_in - 60)) 
    echo "access_token=$access_token\nrefresh_token=$refresh_token\nexpires_at=$expires_at" > $my_creds 
fi 

# if our access token is expired, use the refresh token to get a new one 
if [ $time_now -gt $expires_at ]; then 
    refresh_result=$(curl -s https://accounts.google.com/o/oauth2/token \ 
    -H "Content-Type: application/x-www-form-urlencoded" \ 
    -d refresh_token=$refresh_token \ 
    -d client_id=$client_id \ 
    -d client_secret=$client_secret \ 
    -d grant_type=refresh_token) 
    access_token=$(echo "$refresh_result" | \ 
       ggrep -Po '"access_token" *: *.*?[^\\]",' | \ 
       awk -F'"' '{ print $4 }') 
    expires_in=$(echo "$refresh_result" | \ 
       ggrep -Po '"expires_in" *: *.*' | \ 
       awk -F' ' '{ print $3 }' | awk -F',' '{ print $1 }') 
    time_now=`date +%s` 
    expires_at=$(($time_now + $expires_in - 60)) 
    echo "access_token=$access_token\nrefresh_token=$refresh_token\nexpires_at=$expires_at" > $my_creds 
fi 


# finally this is the call to upload the video (but I haven't managed to set title and description, you might want to make another call for that) 
curl https://www.googleapis.com/upload/youtube/v3/videos?part=snippet \ 
    -d part='snippet' \ 
    -d snippet.title='test of a title' \ 
    -d snippet.description='test of video description' \ 
    --data-binary "@./small.mp4" \ 
    -H "Content-Type: application/octet-stream" \ 
    -H "Authorization: Bearer $access_token" 

để làm cho công việc này, bạn sẽ cần phải

kịch bản này được dựa trên khác question

này Hơn nữa có this github project mà giải quyết vấn đề với trăn ...

0

tôi đã có thể tải video lên kênh của tôi trên YouTube bằng cách sử dụng sau shell script.

#!/bin/sh 

# Upload the given video file to your YouTube channel. 

cid_base_url="apps.googleusercontent.com" 
client_id="<YOUR_CLIENT_ID>.$cid_base_url" 
client_secret="<YOUR_CLIENT_SECRET>" 
refresh_token="<YOUR_REFRESH_TOKEN>" 
token_url="https://accounts.google.com/o/oauth2/token" 
api_base_url="https://www.googleapis.com/upload/youtube/v3" 
api_url="$api_base_url/videos?uploadType=resumable&part=snippet" 

access_token=$(curl -H "Content-Type: application/x-www-form-urlencoded" -d refresh_token="$refresh_token" -d client_id="$client_id" -d client_secret="$client_secret" -d grant_type="refresh_token" $token_url|awk -F '"' '/access/{print $4}') 

auth_header="Authorization: Bearer $access_token" 
upload_url=$(curl -I -X POST -H "$auth_header" "$api_url"|awk -F ' |\r' '/loc/{print $2}'); curl -v -X POST --data-binary "@$1" -H "$auth_header" "$upload_url" 

Tham khảo câu trả lời trước để biết cách nhận giá trị biến tùy chỉnh của bạn.

Các vấn đề liên quan