Проблема со скриптом авторепоста в ВК

355
01 марта 2017, 22:23

Всем привет, нужна помощь в решении проблемы со скриптом для ВК: скрипт берет посты с одной группы и отправляет в другую. Проблема заключается в том, что посты, в которых присутствуют картинки, скрипт репостит не полностью (отправляется, к примеру, только текст, аудиофайлы и т.д.), а посты, состоящие только из картинок, не репостит вообще и выдаёт ошибку №100

<?php
/*
    CREATE TABLE IF NOT EXISTS `by133312` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `post_id` text COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
*/
//  ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ
$mysqli = new mysqli("localhost", "root", "пароль", "имя БД") or die("Error"); 
$mysqli->query("SET NAMES 'utf8'");
define("токен");
//  ID ГРУППЫ КУДА ПОСТИТЬ ПОСТЫ БЕЗ МИНУСА
define("owner_id", "id группы");
//  ID ГРУППЫ ОТКУДА ПОСТЫ БЕЗ МИНУСА
define("owner", "id группы");
/*
    ===============================
        ТУТ НЕЧЕГО НЕ ТРОГАТЬ!!!
        СКРИПТ НАЧИНАЕТ РАБОТАТЬ
    ===============================
*/
$wallGet = by("wall.get", array("owner_id" => -owner, "filter" => "owner"));
if($wallGet[1]["is_pinned"] == 1) {
    $id = 2;
} else {
    $id = 1;
}
$SELECT = $mysqli->query("SELECT * FROM `by133312` WHERE `post_id`='".$wallGet[$id]["id"]."'")->fetch_assoc();
if($SELECT["post_id"] != $wallGet[$id]["id"]) {
    for($i = 0; $i < 10; $i++) {
        if($wallGet[$id]["post_type"] != "copy") {
            if($wallGet[$id]["attachments"][$i]["type"] == "photo") {
                if($wallGet[$id]["attachments"][$i]["photo"]["src_xxxbig"]) {
                    $photo = $wallGet[$id]["attachments"][$i]["photo"]["src_xxxbig"];
                } elseif($wallGet[$id]["attachments"][$i]["photo"]["src_xxbig"]) {
                    $photo = $wallGet[$id]["attachments"][$i]["photo"]["src_xxbig"];
                } elseif($wallGet[$id]["attachments"][$i]["photo"]["src_xbig"]) {
                    $photo = $wallGet[$id]["attachments"][$i]["photo"]["src_xbig"];
                } elseif($wallGet[$id]["attachments"][$i]["photo"]["src_big"]) {
                    $photo = $wallGet[$id]["attachments"][$i]["photo"]["src_big"];
                }
                if($photo) {
                    $attachments .= download($photo, owner_id).",";
                }
            } elseif($wallGet[$id]["attachments"][$i]["type"] == "audio") {
                $attachments .= "audio".$wallGet[$id]["attachments"][$i]["audio"]["owner_id"]."_".$wallGet[$id]["attachments"][$i]["audio"]["aid"].",";
            } elseif($wallGet[$id]["attachments"][$i]["type"] == "video") {
                $attachments .= "video".$wallGet[$id]["attachments"][$i]["video"]["owner_id"]."_".$wallGet[$id]["attachments"][$i]["video"]["vid"].",";
            } elseif($wallGet[$id]["attachments"][$i]["type"] == "doc") {
                $attachments .= "doc".$wallGet[$id]["attachments"][$i]["doc"]["owner_id"]."_".$wallGet[$id]["attachments"][$i]["doc"]["did"].",";
            } elseif($wallGet[$id]["attachments"][$i]["type"] == "poll") {
                $attachments .= "poll"."220353117_".$wallGet[$id]["attachments"][$i]["poll"]["poll_id"].",";
            }
        }
    }
    if($attachments)
        $post = by("wall.post", array("from_group" => 1, "message" => $wallGet[$id]["text"], "owner_id" => -owner_id, "attachments" => $attachments, "access_token" => access_token));
        if($post["post_id"]) {
            Echo "<a href=\"https://vk.com/wall-".owner_id."_".$post["post_id"]."\">wall-".owner_id."_".$post["post_id"]."</a>";
            $mysqli->query("
                INSERT INTO
                `by133312`(
                    `post_id`
                )
                VALUES(
                    '".$wallGet[$id]["id"]."'
                );
            ");
        } elseif($post["error_code"]) {
            Echo "Ошибка №".$post["error_code"];
        }
} else {
    Echo "Данная запись ранее была опубликована.";
}
function by($method, $array = false) {
    $response = curl("https://api.vk.com/method/".$method, $array);
    $json = json_decode($response, true);
    if($json["error"]["error_msg"]) {
        return $json["error"];
    } else {
        return $json["response"];
    }
}
function download($picture = null, $group_id = null) {
    $pic = curl_init($picture);
    $file = fopen("image.jpg", "wb");
    curl_setopt($pic, CURLOPT_FILE, $file);
    curl_setopt($pic, CURLOPT_HEADER, 0);
    curl_exec($pic);
    curl_close($pic);
    fclose($file);
    $getWallUploadServer = by("photos.getWallUploadServer", array("group_id" => $group_id, "access_token" => access_token));
    $upload = curl($getWallUploadServer["upload_url"], array("file1" => "@".dirname(__FILE__)."/image.jpg"));
    $json = json_decode($upload, true);
    $saveWallPhoto = by("photos.saveWallPhoto", array("group_id" => $group_id, "photo" => $json["photo"], "hash" => $json["hash"], "server" => $json["server"], "access_token" => access_token));
    return $saveWallPhoto[0]["id"];
}
function curl($url, $post = false) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4 AlexaToolbar/alxg-3.1');
    if ($post) { 
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}
READ ALSO
Взаимодействие ссылок и указателей

Взаимодействие ссылок и указателей

Если в функцию, принимающую int&, передать *p, где p - указатель на int, то функция будет работать с исходными данными, находящимися по этому адресу,...

199
Константы для максимальных значений

Константы для максимальных значений

Какая константа в STD определяет максимальное значение для типа std::uint64_t и для других подобных типов? Или использовать хедер <climits> ?

207
Ошибка в цикле, удаляющем пробелы

Ошибка в цикле, удаляющем пробелы

Есть код, который выявляет, является ли фраза или слово палиндромом, есть такой код

252