2016-08-22 2 views
0

Ich versuche, ein Bild auf Facebooks Ads Management API in Powershell zu laden, um den Image-Hash später beim Erstellen der eigentlichen Anzeige zu verwenden.Hochladen eines Bildes mit Facebook Ads Management API

$fileName = "adimage.jpg" 
$fileContent = get-content $fileName 
$fileContentBytes = [System.Text.Encoding]::UTF8.GetBytes($fileContent) 
$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes) 

$parameters = @{ 
    access_token = "abc" 
    bytes = $fileContentEncoded 
} 

$result = Invoke-WebRequest -Uri "https://graph.facebook.com/v2.7/act_12345678/adimages" -Method Post -ContentType "image/jpeg" -body $parameters 

ich immer:

{"error":{"message":"Invalid parameter","type":"OAuthException","code":100,"error_subcode":1487242, 
"is_transient":false,"error_user_title":"Image Resize Failed", 
"error_user_msg":"Image Resize Failed:Could not get image size","fbtrace_id":"Bl\/fu39rM2W"}} 

Die API-Seite für den adimages Endpunkt ist: https://developers.facebook.com/docs/marketing-api/reference/ad-image

Wir haben im Grunde für das Äquivalent von

curl -F "[email protected]" -F "access_token=abc" https://graph.facebook.com/v2.7/act_12345678/adimages 

Ich habe suchen auch versucht:

  • ein PNG-Bild
  • mit „Bytes = (get-Inhalt adimage.jpg-Raw)“
  • das Bild über den -infile Parameter veröffentlichen und das Hinzufügen des Zugriffstoken als Parameter statt als mit Formularfeld
    • das Ergebnis dieser (und auch von einigen anderen Variationen) ist, dass ich keinen Fehler und eine 200-Antwort erhalten, aber ein leeres Inhaltsfeld und keine Datei hochgeladen wird entweder

Die Bilder in Frage sind: https://www.dropbox.com/s/hkx236uiiy1p54e/adimage.jpg?dl=0 und https://www.dropbox.com/s/gf9on4w8ijbfwl8/adimage.png?dl=0

Hochladen über die GUI Vermögensverwaltung tätig.

Irgendwelche Ideen?

Sandro

Update: es in der Tat auf einem Mac wie ein Zauber mit curl funktioniert. Das macht es noch unwahrscheinlicher, dass es um die Bilder selbst geht.

+0

kann es nicht zu arbeiten. Verwenden einer sehr groben Workaround, die CURL jetzt von einer Cygwin-Installation verwendet. Bitte posten Sie trotzdem eine Antwort, wenn Sie etwas beizutragen haben. Vielen Dank :-) – Sandro

Antwort

0

Ich hatte das gleiche Problem mit node.js, um die Graph API aufzurufen. Ich habe versucht, UTF-8 kodieren die Datei Bytes und dann Base64 das Ergebnis zu kodieren, aber ich habe den gleichen Fehler.

Wenn ich die UTF-8-Datei encodiere und die rohen Bytes (noch Base64-codiert) verwendet, funktioniert es gut für mich.

So scheitert dies mit dem gleichen "Bild Resize Failed" Fehler:

fs.readFile(imagePath, 'UTF8', (err, fileData) => { 
    let postData = { 
     name: 'My Image', 
     bytes: new Buffer(fileData).toString('base64') 
    };  
    request.post(url, {form: postData}, (err, response, body) => ... 

Aber das funktioniert (keine UTF-8-Codierung):

fs.readFile(imagePath, (err, fileData) => { 
    let postData = { 
     name: 'My Image', 
     bytes: new Buffer(fileData).toString('base64') 
    }; 
    request.post(url, {form: postData}, (err, response, body) => ... 
Verwandte Themen