• Публикация в ленту в Одноклассниках с помощью stream.publish?

    @RuWproSha
    Ниже я привожу полностью готовый PHP код для публикации ТЕКСТ + КАРТИНКИ.

    Примечание*:
    $images - массив с URL картинок вида: ["..path/img/cat.jpg","..path/img/dog.jpg"], его вы сформируете сами. А так же все остальные необходимые переменные ( токен, key и т.д. ) и передавайте в эту функцию ok_wall_post() и все будет работать.

    $images = []; // <- массив с URL картинок вида: ["..path/img/cat.jpg","..path/img/dog.jpg"]
    $message = 'String'; // <- Message
    $user = [] // <-массив с данными пользователя (id, token, и т.д., какие данные у вас хранятся). В этом коде здесь находится token: $user['access_token']
    $application_key = 'String' // <- Публичный ключ приложения -- присылается по e-mail после регистрации приложения
    $session_secret_key = 'String' // <- Session_secret_key приложения -- присылается по e-mail после регистрации приложения
    $application_secret_key = 'String' // <- Секретный ключ приложения -- присылается по e-mail после регистрации приложения
    
    function ok_wall_post($user, $message, $images, $application_key, $application_secret_key, $session_secret_key) {
    
        function getUrl($url, $type = "GET", $params = array(), $image = false, $decode = true) {
    
            if ($ch = curl_init()) {
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_HEADER, false);
    
                if ($type == "POST") {
                    curl_setopt($ch, CURLOPT_POST, true);
    
                    // Картинка
                    if ($image) {
                        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
                    }
                    // Обычный запрос
                    elseif($decode) {
                        curl_setopt($ch, CURLOPT_POSTFIELDS, urldecode(http_build_query($params)));
                    }
                    // Текст
                    else {
                        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
                    }
                }
    
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot');
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    
                $data = curl_exec($ch);
    
                curl_close($ch);
    
                // Еще разок, если API завис
                if (isset($data['error_code']) && $data['error_code'] == 5000) {
                    $data = getUrl($url, $type, $params);
                }
                return $data;
            } else {
                return "{}";
            }
        }
    
    $arrPhotos = Array(); // <- Сюда будем складывать массивы с парами Array('id' => $photo_token);
    
    foreach ($images as $image) { // $images - массив с URL картинок вида: ["..path/img/cat.jpg","..path/img/dog.jpg"]
        $params = [
            'application_key'   => $application_key, // Публичный ключ приложения
            'session_secret_key'=> $session_secret_key, // Session_secret_key
            'access_token'      => $user['access_token'], // access_token
            'method'            => 'photosV2.getUploadUrl',
            'format'            =>  'json'
            ];
        
            ksort($params);
            $paramsS='';
            foreach($params as $k=>$v) {
                $paramsS .= $k . "=" . $v;
            }
        
            $sigg = md5($paramsS.$application_secret_key);
        
            $params['sig'] = strtolower($sigg);
        
            $photo_get_id = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $params), true);
            // echo '<pre>' . json_encode($photo_get_id, JSON_PRETTY_PRINT) . '</pre>';
            $photo_send_id = $photo_get_id['photo_ids']['0'];
            $upload_url = $photo_get_id['upload_url'];
            $paramsP = array('pic1' => curl_file_create($image));
            $photo_send = json_decode(getUrl($upload_url, "POST", $paramsP, true), true);
            // echo '<pre>' . json_encode($photo_send, JSON_PRETTY_PRINT) . '</pre>';
            $photo_token = $photo_send['photos'][$photo_send_id]['token'];
            
            $arrPhotos[] = Array('id' => $photo_token);
            // echo $photo_token . '<br>';
    
    }
    
    $media = array('media' =>
        array(
            array('type'=> 'text','text'=> $message),
            array('type'=> 'photo', 'list'=> $arrPhotos),
        ),
    );
    
    $paramsArray = [
        'application_key'=> $application_key,
        'access_token'=> $user['access_token'],
        'type'=> 'USER',
        'attachment'=> json_encode($media),
        'format' => 'json',
        'method' => 'mediatopic.post',
        ];
        ksort($paramsArray);
        $paramsStr='';
        foreach($paramsArray as $k=>$v) {
            $paramsStr .= $k . "=" . $v;
        }
        $sig = md5($paramsStr.$application_secret_key);
    
        $paramsArray['sig'] = strtolower($sig);
    
        $status = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $paramsArray, false, false ), true);
        //? echo $status . '<br>';       <- String
        echo '<pre>' . json_encode($status, JSON_PRETTY_PRINT) . '</pre>';
    
    }
    Ответ написан
    Комментировать
  • Как сверстать подобное (скрин прикреплен)?

    @RuWproSha
    Друже, вот тебе решение, уверен - разберешься, там все минимально просто.
    Вот чудо-картинка производства Paint.
    5f02504d74a9b398362775.jpeg
    (986x572). На ее примере все поймешь.

    HTML

    <div class="wrap">
      <div class="consumer-container"><p class="text-1">Consumer<br>Products<br>Consulting</p></div>
      <div class="learn-container"><p class="text-2">Learn more</p></div>
    </div>


    CSS

    .wrap {
      position: relative;
      width: 986px;
      height: 572px;
      background: url( КАРТИНКА С КВАДРАТОМ );
    }
    .text-1 {
      color: white;
      font-size: 30px;
      letter-spacing: 0.3em;  /* декор текста  */
    }
    .text-2 {
      color: #FEF200;
      font-size: 24px;
      text-decoration: underline; /* декор текста  */
    }
    .consumer-container {
      position: absolute;
      left: 40%;
      top: 28%;  /* позиции контейнеров, содержащих в себе текст */
    }
    .learn-container {
      position: absolute;
      left: 44%;
      top: 60%;  /* позиции контейнеров, содержащих в себе текст */
    }


    Результат: скриншот
    5f0250d23bab7352427887.jpeg
    Ответ написан