Comments 43
Ох. Неожидал вас увидеть в своем топике :)
Спасибо, за такой подробный комментарий.
Код в статье был для примера, если кому-то нужно — он исправит его под себя. Я не стал оформлять все по стандартам, с документацией, потому что для примера это не нужно. Важно увидеть как оно работает.
Спасибо, за такой подробный комментарий.
Код в статье был для примера, если кому-то нужно — он исправит его под себя. Я не стал оформлять все по стандартам, с документацией, потому что для примера это не нужно. Важно увидеть как оно работает.
А где тут синглтон?
> Выполняем метод авторизации:
> Vkapi::factory()->auth();
> Vkapi::factory()->auth();
Нет, технически не синглтон. Но класс, имеющий только приватные поля, которые не изменяются — по духу и поведению настоящий синглтон.
И? Синглтон гарантирует что у класса будет только один экземпляр, доступный из любого места приложения. Код, который вы процитировали, всегда будет возвращать новый объект класса Vkapi. Где синглтон то? Я бы еще мог предположить что этим кодом реализуется синглтон, если бы увидел Vkapi::instance();, пока не заглянул бы в этот метод.
Еще не совсем понимаю зачем автор попытался изобразить factory. factory method все равно не получился (да он тут и не нужен), а в заблуждение ввести может.
И конструкции типа Vkapi::factory()->auth(); я бы поостерегся использовать, есть вероятность словить unexpected T_PAAMAYIM_NEKUDOTAYIM, зато
будет работать везде.
Еще не совсем понимаю зачем автор попытался изобразить factory. factory method все равно не получился (да он тут и не нужен), а в заблуждение ввести может.
И конструкции типа Vkapi::factory()->auth(); я бы поостерегся использовать, есть вероятность словить unexpected T_PAAMAYIM_NEKUDOTAYIM, зато
$vk = Vkapi::factory();
$vk->auth();
будет работать везде.
Правильно я понимаю, что это годится только для «себя, любимого»? То есть токен связан с конкретным user_id?
Да, именно так. В этом и была начальная задача. Можно изменить код под многопользовательскую работу.
Зачем выкладывать на хабр такие вот, сделанные только под «себя», неконфигурируемые, недопиленные для общего использования вещи?
Какой вообще в этом смысл?
Какой вообще в этом смысл?
Была задача использовать api исключительно на стороне сервера. С одного пользователя. Посмотрите предыдущий топик на эту тему.
Затем, что аудитория хабра — это не одни гики и кармадрочеры. Есть еще так называемый «средний слой», состоящий из людей вроде меня, которые что-то могут, но им нужна простая и понятная инструкция, а не наброски под общим заголовком «кто знает, тот разберется, а остальным не надо». Я по этой инструкции решил для себя вопрос публикации статей вконтакте из Жумлы, чего не смог сделать по другим, таким «допиленным» и «высококонфигурируемым».
Вот уж что, а допилить я смогу и сам. Мне с нуля сложно разобраться, как и многим. Так что, не стоит по себе, такому умному и «допиленному», мерять всех.
Вот уж что, а допилить я смогу и сам. Мне с нуля сложно разобраться, как и многим. Так что, не стоит по себе, такому умному и «допиленному», мерять всех.
Тут вопрос скорее в том, что вы этот же вопрос могли решить парой-тройкой строк кода и этот код выглядел бы куда как понятнее и нагляднее.
А тут получается ООП ради ООП и паттерны (вернее попытка их имитации) ради паттернов.
А насчет надо ли оно на хабре… ну не знаю. Судя по тому, что топик добавляют в избранное — наверное надо. Но тогда и реализация не должна быть такой хромой.
А тут получается ООП ради ООП и паттерны (вернее попытка их имитации) ради паттернов.
А насчет надо ли оно на хабре… ну не знаю. Судя по тому, что топик добавляют в избранное — наверное надо. Но тогда и реализация не должна быть такой хромой.
Я не вижу ничего непонятного в этом коде. Он короткий, и я даже не знаю, что в нем можно сократить. По крайней мере, по этому коду я понял, что к чему, а кроме него тут только весьма громоздкий и шаткий пример с курлом, да задротское объяснение из вышеупомянутой категории «для тех, кто понимает».
Суть, повторюсь, в том, чтобы стало понятно. Дальше если есть мозги и желание — человек сам доделает, нет мозгов — ну, будет ждать готового решения, на что тоже имеет право. Так что, повторюсь, из всех имеющихся примеров этот пока наиболее просто и понятен. Можете сделать еще проще и понятнее унд избавить от необходимости получать токен через браузер — буду вам весьма признателен. Необходимость получения токена — единственное, что грустит слегка.
Суть, повторюсь, в том, чтобы стало понятно. Дальше если есть мозги и желание — человек сам доделает, нет мозгов — ну, будет ждать готового решения, на что тоже имеет право. Так что, повторюсь, из всех имеющихся примеров этот пока наиболее просто и понятен. Можете сделать еще проще и понятнее унд избавить от необходимости получать токен через браузер — буду вам весьма признателен. Необходимость получения токена — единственное, что грустит слегка.
Токен получать придется в любом случае, но в вашей ситуации это разовая операция.
А для публикации достаточно:
А для публикации достаточно:
$data = array(
'owner_id' => ид_юзера,
'message' => 'сообщение',
'from_group' => 1,
'access_token' => 'токен',
);
$content = file_get_contents('https://api.vkontakte.ru/method/wall.post?'.http_build_query($data));
Токен я давно уже получил, не в этом проблема совершенно. Я просто пишу плагин для кроспосстинга статей из жумлы, и не очень понимаю, как реализовать вот такое получение токена. Плагин я потом выложу в репозиторий жумлы, и писать в инструкции, мол, запустите ручками плагин таким-то образом, чтобы получить токен — это моветон. Вот потому и хочется этот момент реализовать более человечно.
clck.ru/W2MJ
client_secret заберите на странице настройки приложения.
client_secret заберите на странице настройки приложения.
>писать в инструкции, мол, запустите ручками плагин таким-то образом, чтобы получить токен — это моветон.
При использовании сторонних сервисов типа Google Analytics, AdSense, Akismet, Loginza(?), FB, VK и т. п. — это не моветон, а норма написать «зайдите на сайт по этой ссылке и получите такой-то ключ/id, который введите в это поле», а то и вообще «в строчку такую-то файла такого-то». Альтернатива сообщить плагину свой логин и пароль, чтобы он сам сделал запрос и распарсил результат, очень небезопасна — может плагин ещё сделает этот запрос на coolhacker.example.com.
При использовании сторонних сервисов типа Google Analytics, AdSense, Akismet, Loginza(?), FB, VK и т. п. — это не моветон, а норма написать «зайдите на сайт по этой ссылке и получите такой-то ключ/id, который введите в это поле», а то и вообще «в строчку такую-то файла такого-то». Альтернатива сообщить плагину свой логин и пароль, чтобы он сам сделал запрос и распарсил результат, очень небезопасна — может плагин ещё сделает этот запрос на coolhacker.example.com.
А зачем тут фабрика?
И я о том же, Vk::factory() выглядит вообще абсурдно, оно понятно если Vk::getInstance(), чтобы не вызывать auth каждый раз, нам нужен один экземпляр.
Для того, что бы не использовать new и писать в одну строчку. В 5.4 это можно будет заменить через (new Vkapi)->auth();
У factory method есть своя область применения и свои цели. Он оперирует подклассами.
В данном случае он называется factory, а фабрикой не является. Зачем?
В данном случае он называется factory, а фабрикой не является. Зачем?
$api = Vkapi::init();
$api->auth();
$api->wall_post($message);
Код скриншотами… У хабра ведь есть прекраснейший тег <source lang=''..">
Все работает, спасибо. Только не нашел, как решить проблему со ссылками. Добавил к массиву переменную 'attachment', подсунул ей адрес сайта, так вместо красивой ссылки, как у новостей в той же группе хабра, он подсовывает еще и картинку с описанием. Как это убрать в данном случае — ума не приложу. Все это можно получить по методу wall.getById, но что потом с этим делать — неизвестно. Там есть переменная noparse, но она используется, когда делишься ссылками. Вот бы что-то подобное подсовывать и тут, потому что ну совсем не нужны эти описалова с картинками в данном случае. Ну, мне не нужны, скажем так :-)
Это работает только для приложений, которые юзер должен эксплицитно установить. Для «сайтов» оповещения, стена и прочие методы, изменяющие данные, не работают. Поправьте меня, если это не так. Я пробовал неделю назад, но, может быть, не очень дотошно.
Надо, наверное, классы и примеры обновить исходя из того что домен уже сменили на vk.com
Написали уже что-нибудь подобное для wordpress?
Автор, возможно, я где-то это упустил в ваших постах, но почему вы решили не пользоваться стандартным php-классом ВКонтакте? vk.com/page-1_2369497 — внизу ссылка на архив APIServerPHPClass.zip.
Потому что тот класс отправляет запросы на api.vk.com/api.php, и соответственно там нужен весь этот расчет подписей, секретных кодов и т.д. А я использую более простое выполнение запросов, через api.vk.com/method/, подробнее в документации. Нужен только access_token.
Sign up to leave a comment.
Автоматическое оповещение читателей о новостях с помощью ВКонтакте. Часть 4