Как я могу передать изображение из хранилища Firebase в Facebook Marketing API? - PullRequest
5 голосов
/ 06 марта 2019

Может ли кто-нибудь помочь мне понять, как мы можем загрузить изображение из Node / Express / Cloud Functions для Firebase.

Так что пишите сейчас, я могу только получить объект, содержащий информацию о моем изображении в хранилище Firebase (через getMetadata();)

let imageInformation = await getImage(domain, thumbID)

где лог консоли imageInformation будет

[ { kind: 'storage#object',
    id: 'functions-firebase-43a59.appspot.com/outlook.com/assets/d547b001-f5bf-b601-c8b1-4bdeb850995e/1551322039811693',
    selfLink: 'https://www.googleapis.com/storage/v1/b/functions-firebase-43a59.appspot.com/o/outlook.com%2Fassets%2Fd547b001-f5bf-b601-c8b1-4bdeb850995e',
    name: 'outlook.com/assets/d547b001-f5bf-b601-c8b1-4bdeb850995e',
    bucket: 'functions-firebase-43a59.appspot.com',
    generation: '1551322039811693',
    metageneration: '1',
    contentType: 'image/png',
    timeCreated: '2019-02-28T02:47:19.811Z',
    updated: '2019-02-28T02:47:19.811Z',
    storageClass: 'STANDARD',
    timeStorageClassUpdated: '2019-02-28T02:47:19.811Z',
    size: '162416',
    md5Hash: '0nES96sSLfY+8nvoLAdjXQ==',
    mediaLink: 'https://www.googleapis.com/download/storage/v1/b/functions-firebase-43a59.appspot.com/o/outlook.com%2Fassets%2Fd547b001-f5bf-b601-c8b1-4bdeb850995e?generation=1551322039811693&alt=media',
    contentDisposition: 'inline; filename*=utf-8\'\'d547b001-f5bf-b601-c8b1-4bdeb850995e',
    metadata: 
     { firebaseStorageDownloadTokens: '78cc9227-a8e7-4797-9929-37983390ad86' },
    crc32c: 'c5GAZw==',
    etag: 'CO389fi03eACEAE=' },
  { kind: 'storage#object',
    id: 'functions-firebase-43a59.appspot.com/outlook.com/assets/d547b001-f5bf-b601-c8b1-4bdeb850995e/1551322039811693',
    selfLink: 'https://www.googleapis.com/storage/v1/b/functions-firebase-43a59.appspot.com/o/outlook.com%2Fassets%2Fd547b001-f5bf-b601-c8b1-4bdeb850995e',
    name: 'outlook.com/assets/d547b001-f5bf-b601-c8b1-4bdeb850995e',
    bucket: 'functions-firebase-43a59.appspot.com',
    generation: '1551322039811693',
    metageneration: '1',
    contentType: 'image/png',
    timeCreated: '2019-02-28T02:47:19.811Z',
    updated: '2019-02-28T02:47:19.811Z',
    storageClass: 'STANDARD',
    timeStorageClassUpdated: '2019-02-28T02:47:19.811Z',
    size: '162416',
    md5Hash: '0nES96sSLfY+8nvoLAdjXQ==',
    mediaLink: 'https://www.googleapis.com/download/storage/v1/b/functions-firebase-43a59.appspot.com/o/outlook.com%2Fassets%2Fd547b001-f5bf-b601-c8b1-4bdeb850995e?generation=1551322039811693&alt=media',
    contentDisposition: 'inline; filename*=utf-8\'\'d547b001-f5bf-b601-c8b1-4bdeb850995e',
    metadata: 
     { firebaseStorageDownloadTokens: '78cc9227-a8e7-4797-9929-37983390ad86' },
    crc32c: 'c5GAZw==',
    etag: 'CO389fi03eACEAE=' } ]

Чего я хочу достичь?

В Facebook Marketing Api, чтобы создать объявление с изображением , нам нужно предоставить ему путь к изображению

curl \
  -F 'filename=@<IMAGE_PATH>' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adimages

Может ли кто-нибудь помочь мне выяснить, как я могу загрузить или передать путь к изображению в Facebook?

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Реализация облачной функции HTTPS, которая обрабатывает запрос с предоставленной информацией domain и thumbID следующим образом.

Облачная функция HTTPS - это не что иное, как конечная точка API, которая должна отвечать данными контента, как это сделал бы веб-сервер. Таким образом, для обслуживания изображения вам необходимо отправить необработанные данные и установить соответствующие заголовки HTTP (например, Content-Type).

Если у вас частые запросы на один и тот же ресурс изображения, вы можете сэкономить слишком много запросов облачного хранилища, а также улучшить время отклика, установив Cache-Control заголовок кэша (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)

).

API администратора для облачного хранилища Firebase использует GCP API, и документацию по загрузке или запросу файлов можно найти здесь: https://cloud.google.com/nodejs/docs/reference/storage/2.3.x/File#download

Пример кода

Попробуйте что-то подобное в своих облачных функциях. index.ts объявление.

import * as admin from 'firebase-admin';

// ...
// Set up your cloud functions etc
// ...

const app = express();
export const tanam = functions.https.onRequest(app);

app.get('/thumb/:domain/:thumbID', async (request, response) => {
    const domain = request.params.domain;
    const thumbID = request.params.thumbID;
    const imageInformation = await getImage(domain, thumbID);
    const contentFile = await admin.storage().bucket().file(imageInformation.name);    
    const [fileContent] = await contentFile.download();

    response.setHeader('Content-Type', imageInformation.contentType);
    response.send(fileContent);

    return null;
});
1 голос
/ 13 марта 2019

Я не уверен, что правильно понял, я бы прокомментировал, если бы мог. Я понял, что вы пытаетесь использовать API cURL Facebook для создания рекламы из изображения, которое вы загружаете из хранилища Firebase, поправьте меня, если я ошибаюсь. Вы пытались передать mediaLink изображения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...