1

Я работаю над новым проектом Meteor, который включает пользователей, регистрирующихся на сайте, используя свои учетные записи Google через OAuth (для этого я использую учетные записи Meteor - пакет google) и при входе мне нужно, чтобы они могли видеть некоторые данные из API YouTube Analytics для своего канала YouTube. На данный момент данные, которые я пытаюсь получить, - это их ежедневные просмотры, которые я надеюсь показать на графике в течение определенного периода времени.Доступ к API YouTube в проекте Meteor для зарегистрированного пользователя

я добавил следующие области действия моих счетов-Google система Логин:

Meteor.loginWithGoogle({ 
     requestPermissions: ['https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/yt-analytics.readonly', 'https://www.googleapis.com/auth/youtube.readonly'], 
     requestOfflineToken: true, 
     forceApprovalPrompt: true, 
     loginStyle: "popup" 
    }); 

Все это, кажется, работает очень хорошо, когда пользователь знаки в сайт и предоставляет доступ к сайтам с этим я могу затем просмотрите необходимую информацию в моей базе данных MongoDB. В user.services.google теперь я могу видеть, что у него есть accessToken, idToken, expiresAt, refreshToken и т. Д.

Я также решил использовать google api nodejs client, выполнив его через метеорологи: пакет npm для Meteor. Я использую это для обновления токенов (как видно из этого SO answer, я нашел полезным).

Использование "Try It" API Explorer, на странице API Documentation YouTube Analytics, можно получить тип данных, я ищу через этот запрос:

GET https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date=2015-10-01&end-date=2015-10-31&metrics=views&dimensions=day&sort=-day&key={YOUR_API_KEY} 

Теперь то, где я был полностью застрял и действительно не уверен, куда идти отсюда. Как я могу реализовать это на своем сайте? Я пробовал довольно долгое время, чтобы выполнить эту работу, но все, что я пытаюсь, не работает, и нет никакого реального направления. Если кто-то захочет помочь, я бы очень признателен. Я довольно новичок в Meteor/JS/API, поэтому любая информация/примеры чрезвычайно ценится, особенно дружелюбный материал noob! ;)

ответ

1

Один из способов сделать это является использование метода и HTTP пакета: https://atmospherejs.com/meteor/http

Глядя на документе вы предоставляете, вы можете попробовать что-то вроде этого:

Определите свой метод на сервере сторона

// server-side 
Meteor.methods({ 
    getYoutubeReports: function(channelId, accessToken, params) { 
    params.ids = "channel=="+ channelId; 
    params.key = accessToken; 
    return HTTP.get("https://www.googleapis.com/youtube/analytics/v1/reports", { 
     params: params 
    }); 
    } 
}); 

вы можете назвать это на стороне клиента с данными вы получаете от вашей аутентификации (то есть. CHANNEL_ID_OF_MY_USER & ACCESS_TOKEN_OF_MY_USER)

// client-side 
var reports, 
    myParams = { 
     "start-date": "2015-10-01", 
     "end-date": "2015-10-31", 
     "metrics": "views", 
     "dimensions": "day", 
     "sort": "-day" 
    }; 

Meteor.call('getYoutubeReports', CHANNEL_ID_OF_MY_USER, ACCESS_TOKEN_OF_MY_USER, params, function(error, result) { 
    // store or do stuff with the result of the HTTP request here 
    console.log(result); 
}); 

Не стесняйтесь на заказ myParams как вам нужно!

И если вы хотите еще несколько советов о том, как использовать запрос HTTP (очень полезно для вызова внешнего API), Метеор Chef написал очень хорошую статью об этом: https://themeteorchef.com/snippets/using-the-http-package/

Я надеюсь, что это помогает!

+0

Большое спасибо за ответ, я определенно собираюсь попробовать это и надеюсь, что смогу заставить его работать! У меня есть только один вопрос: как было бы лучше всего ввести «CHANNEL_ID_OF_MY_USER» и «ACCESS_TOKEN_OF_MY_USER»? На данный момент я вижу, что токен доступа хранится в services.google.accessToken. Идентификатор канала, похоже, не хранится нигде в «пользователях», но я предполагаю, что могу как-то сохранить его в профиле пользователей.Я просто не знаю, как это ввести эти данные в Meteor.call? – U54

+0

Я пытался использовать Publish/Subscribe для этого, но ханжеств», кажется, чтобы заставить его работать .. У меня есть это в моем server.js: Meteor.publish („access_token“, функция() { \t \t возвращения Метеор .users.find (this.userId, {fields: {'services.google.accessToken': 1}}); \t}); // Затем я подписываю в клиенте: Meteor.subscribe («access_token»); // а затем я пытаюсь заменить «ACCESS_TOKEN_OF_MY_USER» на «access_token», но, похоже, это вообще не работает. Любые идеи о том, где я ошибаюсь, или как я мог бы достичь чего-то подобного? – U54

+0

Привет @ U54! Подписка дает вам право доступа к опубликованным данным. Поэтому вам нужно сделать так: «let user = Meteor.users.findOne ({_ id: Meteor.userId()})', где вы хотите получить данные и получить доступ к вашему токену, используйте эту переменную: 'user. services.google.accessToken'. –

Смежные вопросы