Nano Hash - криптовалюты, майнинг, программирование

Публикация в блоге с PHP

У меня возникает проблема с отправкой моего php-скрипта в блоггер с использованием HTTP-аутентификации клиента.

Я следовал инструкциям из https://developers.google.com/blogger/docs/1.0/developers_guide_php

Вот мой код:

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');

$user = 'myuserid';
$pass = 'mypassword';
$blogUrl = 'myblog.blogspot.com';
$service = 'blogger';

$gdClient = new Zend_Gdata($client);
$blogID = getBlogId($gdClient, 'http://'.$blogUrl.'/feeds/posts/default');

$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service, null,
        Zend_Gdata_ClientLogin::DEFAULT_SOURCE, null, null, 
        Zend_Gdata_ClientLogin::CLIENTLOGIN_URI, 'GOOGLE');

function createPublishedPost($gdClient, $myBlogId, $title='Hello, world!', $content='I am blogging on the internet.')
{
    $uri = 'https://www.blogger.com/feeds/' . $myBlogId . '/posts/default';
    echo $uri; // nothing wrongs here.
    $entry = $gdClient->newEntry();
    $entry->title = $gdClient->newTitle($title);
    $entry->content = $gdClient->newContent($content);
    $entry->content->setType('text');

    $createdPost = $gdClient->insertEntry($entry, $uri); // I think the error is here.
    $idText = split('-', $createdPost->id->text);
    $newPostID = $idText[2];

    return $newPostID;
}

function getBlogId($gdClient, $feed)
{
    $gdClient = new Zend_Gdata($client);
    $query = new Zend_Gdata_Query($feed);
    $feed = $gdClient->getFeed($query);
    preg_match('/blog-([0-9]+)/', $feed->id->text, $match);
    if (isset($match[1]))
    {
        return $match[1];
    }
    return false;
}

createPublishedPost($gdClient, $blogID);

сообщение об ошибке:

Fatal error: Uncaught exception 'Zend_Gdata_App_HttpException' with message 'Expected response code 200, got 401 User does not have permission to create new post' in /home/content/36/9549036/html/[MYUSER]/Zend/Gdata/App.php:714 Stack trace: #0 /home/content/36/9549036/html/[MYUSER]/Zend/Gdata.php(221): Zend_Gdata_App->performHttpRequest('POST', 'https://www.blo...', Array, '<atom:entry xml...', 'application/ato...', NULL) #1 /home/content/36/9549036/html/[MYUSER]/Zend/Gdata/App.php(905): Zend_Gdata->performHttpRequest('POST', 'https://www.blo...', Array, '<atom:entry xml...', 'application/ato...') #2 /home/content/36/9549036/html/[MYUSER]/Zend/Gdata/App.php(980): Zend_Gdata_App->post(Object(Zend_Gdata_Entry), 'https://www.blo...', NULL, NULL, Array) #3 /home/content/36/9549036/html/[MYUSER]/test.php(29): Zend_Gdata_App->insertEntry(Object(Zend_Gdata_Entry), 'https://www.blo...') #4 /home/content/36/9549036/html/[MYUSER]/test.php(49): createPublishedPost(Object(Zend_Gdata), '[MYBLOGID]...') #5 {main} thrown in /home/content/36/9549036/html/[MYUSER]/Zend/Gdata/App.php on line 714

Кто-нибудь испытал это раньше? Есть ли какой-нибудь рабочий код для публикации блоггера с php?


  • Вы уверены, что это не проблема аутентификации, то есть неправильное имя пользователя или пароль? 24.11.2012
  • нет, я почти уверен, что это не так .. во всяком случае, я, кажется, нашел проблему, я опубликую свою исправленную вещь как можно скорее. 25.11.2012

Ответы:


1

Я нашел проблему, это работает так.

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');

$user = $_SESSION['BloggerUsername'];
$pass = $_SESSION['BloggerPassword'];
$blogUrl = $_SESSION['BloggerUrl'];
$service = 'blogger';

global $gData, $gBlogId;

$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service, null,
        Zend_Gdata_ClientLogin::DEFAULT_SOURCE, null, null, 
        Zend_Gdata_ClientLogin::CLIENTLOGIN_URI, 'GOOGLE');

function createPublishedPost($gData, $gBlogId, $myBlogTitle, $myBlogText)
{
    $uri = 'https://www.blogger.com/feeds/' . $gBlogId . '/posts/default';
    $entry = $gData->newEntry();
    $entry->title = $gData->newTitle($myBlogTitle);
    $content = $gData->newContent($myBlogText);
    $content->setType('text');
    $entry->content = $content;
    $entryResult = $gData->insertEntry($entry, $uri);
    //$idText = split('-', $entryResult->id->text);
    //$newPostID = $idText[2];
    if (!empty($_SERVER['HTTP_REFERER'])) {
        header("Location: ".$_SERVER['HTTP_REFERER']);
    } else {
        header("location:*my_website_link*");
    }
    //return $newPostID;
}

function getBlogId($gData, $feed)
{
    $query = new Zend_Gdata_Query($feed);
    $feed = $gData->getFeed($query);
    preg_match('/blog-([0-9]+)/', $feed->id->text, $match);
    if (isset($match[1]))
    {
        return $match[1];
    }
    return false;
}
$gData = new Zend_Gdata($client);
$gBlogId = getBlogId($gData, 'http://'.$blogUrl.'/feeds/posts/default');
createPublishedPost($gData, $gBlogId, $blogTitle, $blogText);
25.11.2012
  • На самом деле это не объясняет, в чем была проблема, и не помогает другим с той же проблемой. Маловероятно, что кто-то может просто скопировать/вставить проприетарный образец кода без какого-либо объяснения основной проблемы и того, почему это решает ее. 04.06.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..