Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 08.12.2013, 21:22   #1
Почетный Пользователь
 Рыцарь
Аватар для the-boxi
 
the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(
Регистрация: 09.02.2011
Сообщений: 373
Популярность: 38009
Сказал(а) спасибо: 612
Поблагодарили 448 раз(а) в 175 сообщениях
Отправить сообщение для the-boxi с помощью ICQ Отправить сообщение для the-boxi с помощью MSN Отправить сообщение для the-boxi с помощью Skype™
 
По умолчанию Как работать с vk.api и как я вижу это

Речь идет про [Ссылки могут видеть только зарегистрированные пользователи. ]!

Предисловие:
Захотелось как-то набросать скрипт который будет выполнять авторизацию пользователя в приложении. Получать ключ(acces_token) и работать с ним.
Так вот это не так уж и сложно, причем если у нас в запасе есть [Ссылки могут видеть только зарегистрированные пользователи. ]

Задача:
Сделать класс для работы с vk api!

Ну что ж приступим.

Для начала создадим тело класса
Код:
<?php
/**
 * @author Boxya
 * @copyright 2013
 */
class VkApi{
}
В него нам понадобиться положить константой ссылку на авторизацию в приложени(страницу где пользователь подтверждает то, что согласен позволить приложению выполнять определенные действия) [Ссылки могут видеть только зарегистрированные пользователи. ]

У меня вышла вот такая:
Код:
public $UrlOAuth = "https://oauth.vk.com/authorize?client_id=3890571&scope=15391&redirect_uri=blank.html&display=mobile&v=5.1&response_type=token";
Еще нужны переменные для хранения Логина, Пароля, Куков и Ключа доступа и просто переменная для установки состояния авторизации:
Код:
    //Переменная для хранения куков
    public $Cookie = null;
    //Переменная для хранения ключа доступа
    public $Acces = null;
	// Переменная хранит логин
    public $Login = null;
    //Пароль
    public $Password = null;
    //Авторизован?
    public $AuthInVk = false;
Создадим простенький конструктор нашего класса:
Код:
    //Конструктор класса
    public function VkApi($login,$pass)
    {
       $this->Login = $login;
       $this->Password = $pass;
       //Функция авторизации описана в гайде ниже
       $this->Login();
    }
Нам понадобиться:
Функция для парсинга (что бы доставать из запроса нужные части)
Функция отправки HTTP запросов к серверу vk.api с помощью curl
Функция отправки метода к vk.api

Функция парсинга проста и имеет вид (описывать ее не вижу смысла, если вы не понимаете этого - читайте книги и изучайте):
Код:
    //Функция парсинга
    function Parse($what, $start, $end)
    {
        $i=0;
        while (true)
        {
            $pos1 = strpos($what,$start);
            if ($pos1 == FALSE) 
             break;   
            $pos1 =$pos1 + strlen($start);
            $pos2 = strpos($what,$end,$pos1);
            if ($pos2 == FALSE) 
            {
             break;   
            }
            $arr[$i] = substr($what,$pos1,$pos2-$pos1);
            $i++;
            $what = substr($what,$pos1);
        }
        return $arr;
    }
Отправка запросов (все ищите в описании библиотеки) но параметры передаваемые понятны как никогда (все брал из примера использовани и таблицы параметров):
Код:
    //Функция отправки запросса 
    function SendMassege($url, $post=null)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'FIREFOX');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
        curl_setopt($ch, CURLOPT_POST, ($post==null)? 0:1);
        if($post!=null)
        {
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
        }
        if($this->Cookie!=null)
        {
        curl_setopt($ch, CURLOPT_COOKIE, $this->Cookie);
        }
        $res=curl_exec($ch);
        curl_close($ch);
        
        if(strpos($res,"Location:")===false)
        null;
        // Проверка на смену локации
        else 
        {
            $location = $this->Parse($res,"Location: ","\r\n");
            if($location[0] != "/")
            $res .=$this->SendMassege($location[0]);
        }
        return $res;
    }
Отправка метода к апи:
Код:
    //Функция для отправки метода вк
    function Method($name, $params)
    {
        //Записываем на отправку ключ доступа и данные переданные функцие
        $MethodData = "access_token=".$this->Acces.$params;
        //Отправляем запросс
        $some = $this->SendMassege("https://api.vk.com/method/".$name."?".$MethodData,null);
        //Возвращаем ответ
        return $some;
    }
И конечно же функция авторизации и получения ключа (все описано в коментариях):
Код:
    function Login()
    {
        $text = $this->SendMassege("http://m.vk.com/");
        //Получаем ссылку на вторизацию
        $some = $this->Parse($text, "<form method=\"post\" action=\"", "\"");
        $action = $some[0];
        //Составляем данные на отправку
        $toSend = "email=".$this->Login."&pass=".$this->Password;
        //Отправляем запросс авторизации
        $text = $this->SendMassege($action,$toSend);
        $arr_cook = $this->Parse($text, "Set-Cookie: ", ";");
        //Записываем куки в нашу переменную
        if (is_array($arr_cook))
        {
            foreach($arr_cook as $st)
            {
            $this->Cookie .= $st.";";
            }
        }
        //Отправляем запросс на автризацию в приложении
        $text = $this->SendMassege($this->UrlOAuth,"").'\r\n';
        //Получаем ссылку на авторизацию
        $some = $this->Parse($text, "<form method=\"post\" action=\"", "\"");
        //Отправляем запросс
        $text = $this->SendMassege($some[0],"").'\r\n';
        //Получаем ключ доступа
        $some = $this->Parse($text, "access_token=", "&");
        //Сохраняем ключ
        $text = $this->SendMassege("http//vk.com/login.php?act=security_check&to=&al_page=","");
        $this->Acces = $some[0];
        echo "Key = ".$this->Acces."<br />";
    }
Все мы получили полноценный класс для работы с VkApi мы его можем улучшать как угодно и добавлять функции для работы с определенными запросами к апи:
VkApi.php

Послесловие:
Парсинг JSON я не описывал, но он у меня есть. Кому нужно могу дать, причем в PHP есть функция
Код:
json_decode($parametr);
Проверить очень просто:
Код:
$test = new VkApi("login","password");
$test->ChangeStatusOnUnixTime();
Результат выполнения скрипта:
Image
Результат
Код:
{"response" : 1}
говорит о том, что все прошло удачно!
На странице будет установлен статус, в котором написано юникс время.
Спасибо за внимание. Код писал сам, все у кого есть исправления по коду пишите. Буду рад вас выслушать


Пример кода, который ставит в статус количество дней, минут и секунд оставшихся до нового года:
Код:
    function SetStatusNewYearTime()
    {
        $realtime = mktime(0, 0, 0, 01, 01, date('Y')+1);
        $futuretime = $realtime - time();
        $resp = $this->Method("status.set","&text=".urlencode(date("New Year: j days h hours i minutes s seconds", $futuretime)));
    }

Пример кода для отправки сообщения пользователям:
Код:
    function SendMassegeVk($toid,$title,$text)
    {
        $title = urlencode($title);
        $text = urlencode($text);
        $resp = $this->Method("messages.send","&title=".$titile."&user_id=".$toid."&message=".$text);
        echo $resp;
    }
Пример использования:
Код:
$test = new VkApi(login,password);
$test->SendMassegeVk("30008375","Отправлено со скрипта","Привет с:");
Всем Удачи :З
________________
Разработка программ на заказ, все вопросы skype - the-boxi, ICQ - 616027961

Последний раз редактировалось the-boxi; 09.12.2013 в 10:50.
  Ответить с цитированием
5 пользователя(ей) сказали cпасибо:
MembRupt (12.02.2014), object (22.03.2014), skan444 (05.01.2014), VeTaL_UA (08.02.2014), WOLF9595 (02.02.2014)
Старый 02.02.2014, 22:12   #2
 Разведчик
Аватар для WOLF9595
 
WOLF9595 на правильном путиWOLF9595 на правильном пути
Регистрация: 17.10.2011
Сообщений: 22
Популярность: 164
Сказал(а) спасибо: 47
Поблагодарили 32 раз(а) в 24 сообщениях
Отправить сообщение для WOLF9595 с помощью Skype™
 
По умолчанию Re: Как работать с vk.api и как я вижу это

Впринципе неплохо
Цитата:
Создадим простенький конструктор нашего класса:

Только вопрос, чем стандартный конструктор хуже(который создается при создание класса) __construct(#параметры){#code}
вроде нет никакого переопределения методов далее в коде
  Ответить с цитированием
Старый 03.02.2014, 09:55   #3
Почетный Пользователь
 Рыцарь
Аватар для the-boxi
 
the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(the-boxi сломал счётчик популярности :(
Регистрация: 09.02.2011
Сообщений: 373
Популярность: 38009
Сказал(а) спасибо: 612
Поблагодарили 448 раз(а) в 175 сообщениях
Отправить сообщение для the-boxi с помощью ICQ Отправить сообщение для the-boxi с помощью MSN Отправить сообщение для the-boxi с помощью Skype™
 
По умолчанию Re: Как работать с vk.api и как я вижу это

Цитата:
Только вопрос, чем стандартный конструктор хуже(который создается при создание класса) __construct(#параметры){#code}
вроде нет никакого переопределения методов далее в коде

Кто создается? Где создается?
Конструктор __construct ничем не отличается от моего, у вас наверное IDE которая создает автоматически, а я пишу в Notepad++.
[Ссылки могут видеть только зарегистрированные пользователи. ].
________________
Разработка программ на заказ, все вопросы skype - the-boxi, ICQ - 616027961

Последний раз редактировалось the-boxi; 03.02.2014 в 10:55.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Услуги] виду поиск azotiz Dark Orbit 0 21.11.2012 13:24
[Продам] R-шмот, R-бижу, S-шмот, S-бижу на Руоффе(lineage2.ru) SASHAAA19 Lineage 2 0 06.06.2012 17:05

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 19:40.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net