Отправка запроса изображения на Facebook ( Marmalade C++) не удалась
После нескольких исследований и несколько раз ударившись головой о стену, я почти закончил писать код. Я могу подключиться к Facebook и даже отправлять запросы сообщений, но я не могу отправлять фотографии. Вот код:
s3eFBRequest* pWallPostRequest = s3eFBRequest_WithGraphPath(MultiLoginScene::getSession(), "me/photos", "POST");
s3eFBRequest_AddParamString(pWallPostRequest, "picture", MakeScreenshot());
//s3eFBRequest* pWallPostRequest = s3eFBRequest_WithGraphPath(MultiLoginScene::getSession(), "me/feed", "POST");
//s3eFBRequest_AddParamString(pWallPostRequest, "message", "Here's a wall post!");
s3eFBRequest_AddParamString(pWallPostRequest, "access_token", s3eFBSession_AccessToken(MultiLoginScene::getSession()));
s3eFBRequest_Send(pWallPostRequest, GraphRequestCallback, NULL);
А насчет MakeScreenshot()
static void flipVertical(unsigned char *data, int w, int h)
{
int x, y, i1, i2;
unsigned char temp;
for (x=0;x<w;x++){
for (y=0;y<h/2;y++){
i1 = (y*w + x)*3; // this pixel
i2 = ((h - y - 1)*w + x)*3; // its opposite (across x-axis)
// swap pixels
temp = data[i1];
data[i1] = data[i2];
data[i2] = temp;
i1++; i2++;
temp = data[i1];
data[i1] = data[i2];
data[i2] = temp;
i1++; i2++;
temp = data[i1];
data[i1] = data[i2];
data[i2] = temp;
}
}
}
const char* MainMenuScene::MakeScreenshot()
{
static int count = 0;
static char file[] = "PicaSim-00000.png";
sprintf(file, "PicaSim-%05d.png", count++);
// int w = s3eSurfaceGetInt(S3E_SURFACE_WIDTH);
//int h = s3eSurfaceGetInt(S3E_SURFACE_HEIGHT);
int w = 600;
int h = 600;
int dataSize = w * h * 3;
unsigned char *framebuffer =
(unsigned char *) malloc(dataSize * sizeof(unsigned char));
glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, framebuffer);
flipVertical(framebuffer, w, h);
/* CIwImage image;
image.SetFormat(CIwImage::BGR_888);
image.SetWidth(w);
image.SetHeight(h);
image.SetBuffers(framebuffer, dataSize);
image.SavePng(file);
free(framebuffer);*/
return (const char *)framebuffer;
}
В конце концов я получаю неудавшийся ответ от моего обратного вызова... Что я могу делать не так? Мне просто нужно отправить скриншот в Facebook... Есть идеи, почему не работает?
РЕДАКТИРОВАТЬ:
Поэтому я попытался отправить URL-адрес в качестве параметра, но по-прежнему не работает, вот код
s3eFBRequest* pWallPostRequest = s3eFBRequest_WithGraphPath(MultiLoginScene::getSession(), "me/photos", "POST");
s3eFBRequest_AddParamString(pWallPostRequest, "picture", "http://img1.wikia.nocookie.net/__cb20130407100142/onepiece/pt/images/d/d8/Goku_2.jpg");
s3eFBRequest_AddParamString(pWallPostRequest, "access_token", s3eFBSession_AccessToken(MultiLoginScene::getSession()));
s3eFBRequest_Send(pWallPostRequest, GraphRequestCallback, NULL);
Но все еще не работает... какая-либо подсказка?
1 ответ
Вы отправляете буфер кадров в качестве параметра в Facebook!
Facebook принимает только URL изображения в качестве picture
параметр. Таким образом, ваше изображение должно быть загружено на веб-сервер, а URL-адрес должен быть в picture
параметр, в который вы отправляете буфер кадра.