ライブドアブログにPHPスクリプトで投稿するためのコードに関する質問

このQ&Aのポイント
  • ライブドアブログにPHPスクリプトで投稿するためのコードを実行すると「<?xml version="1.0" encoding="utf-8" ?> <error>Invalid login</error>」というメッセージが表示される。id、パスワードは正しい。エンコード方法が間違っているのか不明。curl_setopt($ch, CURLOPT_POST, true);でのメッセージだと推測される。ブログの管理人との連絡方法がわからない。
  • ライブドアブログにPHPスクリプトで投稿するためのコードの実行時に「<?xml version="1.0" encoding="utf-8" ?> <error>Invalid login</error>」というエラーメッセージが表示される。idとパスワードは正しい。エンコード方法が間違っている可能性がある。curl_setopt($ch, CURLOPT_POST, true);でのメッセージが原因の可能性が高い。ブログの管理人と連絡できないため、アドバイスを求めている。
  • ライブドアブログにPHPスクリプトで投稿するためのコードを実行すると「<?xml version="1.0" encoding="utf-8" ?> <error>Invalid login</error>」というメッセージが表示される。id、パスワードは正しいのにエラーが出ている。curl_setopt($ch, CURLOPT_POST, true);でのメッセージが問題の可能性がある。管理人との連絡手段がないので、アドバイスを求めている。
回答を見る
  • ベストアンサー

ライブドアブログにPHPスクリプトで投稿したい

お世話になります。 ライブドアブログにPHPスクリプトで 投稿するためのコードを あるブログで見つけましたが、 下記のコードを実行すると 「<?xml version="1.0" encoding="utf-8" ?> <error>Invalid login</error>」 というメッセージが表示します。 id 、パスワードはあっています。 エンコード方法が、間違っているんでしょうか? 「curl_setopt($ch, CURLOPT_POST, true);」 でのメッセージだと推測します。 そのブログの管理人との連絡方法が ありません。 どなたか、お手数をおかけしますが、 アドバイスをいただけると幸いです。 <?php $livedoor_id = "id"; // livedoorID $password = "APIKEY"; // パスワード $title = "english"; // 記事タイトル $text = "this is a pen"; // 記事本文 $atomapi_url = "http://cms.blog.livedoor.com/atom/"; $created = date('Y-m-d\TH:i:s\Z'); $nonce = pack('H*', sha1(md5(time()))); $pass_digest = base64_encode(pack('H*', sha1($nonce.$created.$password))); //$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.strtolower(md5($password))))); $wsse = 'UsernameToken Username="'.$livedoor_id.'", '. 'PasswordDigest="'.$pass_digest.'", '. 'Nonce="'.base64_encode($nonce).'", '. 'Created="'.$created.'"'; $text64= base64_encode($text); $rawdata = '<?xml version="1.0"?>'. '<entry xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">'. '<title type="text/html" mode="escaped">'.$title.'</title>'. '<dc:subject type="text/html" mode="escaped">'.$category.'</dc:subject>'. '<content type="application/xhtml+xml" mode="base64">'.$text64.'</content>'. '</entry>'; //echo $rawdata; $headers =array( 'X-WSSE: ' . $wsse, 'Expect:' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $atomapi_url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS,$rawdata); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($ch); curl_close($ch); //出力結果確認用 echo $res; ?>

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • tomaju
  • ベストアンサー率76% (84/110)
回答No.1

あるブログってこちらのことですかね。 http://d.hatena.ne.jp/soramugi/20110409/1302362739 本日付で、ブログ主さんからコメントがついていますね。 > 完成されたいのでしたら 新しく記事書いたのでこちらを使ってみて下さい > http://d.hatena.ne.jp/soramugi/20111109/1320853307

miracle2006
質問者

お礼

実は、このブログでコメントしたのは、私で その後何回かのやり取りで、 なんとか解決しました。 コメントはしましたが、 回答してくれるとは思いませんでしたので、 併せてGooにも投稿させていただいた次第です。 心遣いありがとうございました。 まだ、カテゴリーマッチングの問題が残っていますので、 別の質問として投稿させてもらいました。

関連するQ&A

  • mixiのブログにPHPで投稿をするプログラムで

    タイトルの件で教えて頂きたい事が出てきました。 以下のサイトで公開されてますプログラムを利用しまして ttp://creazy.net/2008/07/post_a_mixi_dialy_from_php.html 少し省略していますが下記のように少し変更して使って見ました。 尚、テキストだけでも投稿可能となっていましたので 画像の部分は外しています。 試してみましたら$res_codeの所で「404」が返って来まして 失敗しているようで投稿できません。 いろいろと考えてやってみましたが良く分かりません。 ご存知の方がいらっしゃいましたらご教授のほどお願いいたします。 環境は以下の通りです。 ・OS:Windows XP/Apache2.0 ・PHP 5.2 以下が試したプログラムの抜粋です ------------------------------------------------------------ // mixi USER infomation $user = 'mixiのログインID'; // << 実際は登録データを設定済みです $pass = 'mixiのパスワード'; // $id = 'mixiのユーザーID'; // // WSSE Authentication // Windowwsでは、posix_getpidは使えないので uniqidに変更 //$nonce = pack('H*', sha1(md5(time().rand().posix_getpid()))); $nonce = pack('H*', sha1(md5(time().rand().uniqid("")))); $created = date('Y-m-d\TH:i:s\Z'); $digest = base64_encode(pack('H*', sha1($nonce . $created . $pass))); $wsse_text = 'UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"'; $wsse_header = sprintf($wsse_text, $user, $digest, base64_encode($nonce), $created); // mixi POST URL $url = 'http://mixi.jp/atom/diary/member_id=' . $id; //------------------------------------------------------------ // Post Text //------------------------------------------------------------ $post_data = "<?xml version='1.0' encoding='utf-8'?>" . "<entry xmlns='http://www.w3.org/2007/app'>" . "<title>テストタイトル</title>" . "<summary>テスト・テスト・テスト</summary>" . "</entry>"; $request = new HTTP_Request($url); $request->setMethod(HTTP_REQUEST_METHOD_POST); $request->addHeader('X-WSSE', $wsse_header); $request->setBody($post_data); if (PEAR::isError($request->sendRequest())) { die('request failed'); } $res_code = $request->getResponseCode(); echo "$res_code\n"; // 404が返ってくる ------------------------------------------------------------

    • 締切済み
    • PHP
  • PHP データ 送受信

    http://hogehoge.com/form.php http://hogehoge.com/send.php http://localhost.com/api.php http://hogehoge.com/send.phpにアクセスした際に http://hogehoge.com/form.phpで入力したデータを http://localhost.com/api.phpに飛ばす方法に困っています。 参考サイト http://blog.code4u.org/archives/407 send.php側 $url = 'http://localhost.com/api.php'; $params = array( 'name' => $name, 'email' => $email, 'address' => $address, 'tel' => $tel, ); $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/x-www-form-urlencoded' ) ); $result = curl_exec($ch); curl_close($ch); と記述したのですが、 api.php でデータを受け取るコードがわからず困っています。 お分かりの方がいたらお願いします。

    • 締切済み
    • PHP
  • phpのcurlでのエラー

    ローカル、IIS8.5+PHP5.6環境で、PHPのcurlを用いてPDFファイルをアップロードするとエラーが出ます。 エラーは以下のようなものです。 === {"files":[{"name":"1425191187-473","size":221,"type":"multipart\/form-data; boundary=------------------------c4894a433c24bba9","error":"Filetype not allowed"}]} === どの点が問題なのかご教示いただけないでしょうか? PHP5.6の設定では、php.iniの「extension=php_curl.dll」の「;」のみを外しました。 また、ローカルPCにダウンロードしたcurl.exeコマンドからはアップロードできることを確認しました。 コマンド:「curl -F "files[]=@C:\Users\***\Desktop\***.pdf;type=application/pdf http://127.0.0.1/***/upload」 アップロードできないPHPソースは以下となります。 === $oname = '@C:\Users\***\Desktop\***.pdf;type=application/pdf'; $files = array( 'files[]' => $oname ); $url = 'http://127.0.0.1/***/upload'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8'); curl_setopt($ch, CURLOPT_POSTFIELDS, $files); curl_exec($ch); curl_close($ch); ===

    • 締切済み
    • PHP
  • PHPのcURLによるログインについての質問

    PHPのcURLによるログインについての質問をさせて頂きます。 会員サイトでIDとPASSの入力を行い、ログインをしてページの移行していくPHPの コードを書いておりますが、途中ページで検索BOXのフォームにキーワードを入れて 次のページに移行する必要があるのですが、ページ移行ができない状況であります。 質問をさせて頂きたい内容ですが、フォームへの入力が必要となるため、 下記のコードの入力項目である【$params01】又は他の部分に どのような記述をすればよいかをご教授いただければと思います。 サンプルコードなどを掲載しているサイトなどで調べていましたが、 【$params01】の配列のkeyの部分がname属性としているようなのですが、 今回ログインをするページの検索BOXのフォームにはname属性は付けられていないようです。 よろしくお願いいたします。 【$params01】 $params01 = array( "dscrCdNm" => '7893', "marketCd" => '検索' ); $address01 = 'https://xxxxxxxxxx.co.jp/xxxxxxxxxx'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $address01); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $params01); $inputcode = curl_exec($ch) or die('error ' . curl_error($ch)); mb_language("Japanese"); $order_adress = mb_convert_encoding($inputcode, "UTF-8", "auto"); print($order_adress); 【検索BOXのフォームのHTML部分】 <div class="box-search-stock-01 mb00" > <fieldset> <legend>検索</legend> <p class="search"> <label for="ss-02">名前・コード</label>: <input type="text" name="dscrCdNm" value="" id="ss-02"> <input type="hidden" name="marketCd" value=""> <input type="hidden" name="industryCd" value=""> <input type="image" src="/member/images/btn-search-02.gif" class="roll img-ipad" value="検索" title="検索" /> <span style="padding: 0 0 0 20px;"><a href="javascript:void(0);" onclick="modalOpenAction();return false;">→詳細検索はこちら</a></span> </p> </fieldset> </div> <input type="hidden" name="offsetRow" value=""> <input type="hidden" name="trdKbn" value="10"> <input type="hidden" name="pageNo" value="1">

    • ベストアンサー
    • PHP
  • function で json を POST

    37行目に PHP Fatal error: Cannot redeclare sendPostData() と出るのをどのように修正すれば、sendPostData がうまく回りますか。 <?php $total = 110; $test = 2; for ( $i = 0; $i <= ceil($total/100); $i++){ $data = array ( "filters" => array ( array ( "field" => "live_status", "type" => "equal", "value" => "past", ), array ( "field" => "start_time", "from" => "2014-03-12 00:00:00", "to" => "2014-03-13 00:00:00", "type" => "range", ) ), "from" => $test*$i, "issuer" => "apiguide", "join" => array ( 0 => "cmsid", 1 => "title", 2 => "community_id", 3 => "start_time", 4 => "live_end_time", 5 => "comment_counter", 6 => "score_timeshift_reserved", 7 => "provider_type", 8 => "tags", 9 => "member_only"), "order" => "desc", "query" => "一般(その他)", "reason" => "ma9", "search" => array ( "tags" ), "service" => array ( "live" ), "size" => $test, "sort_by" => "_live_recent", ); $encoded = json_encode($data, JSON_UNESCAPED_UNICODE); $url_send ="http://api.search.nicovideo.jp/api/"; function sendPostData($url, $post){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS,$post); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-type: application/json; charset=UTF-8')); $result = curl_exec($ch); curl_close($ch); return $result; } echo " " . sendPostData($url_send, $encoded); } ?>

    • ベストアンサー
    • PHP
  • LocationでのPOSTの方法

    AサーバーからBサーバーへHTMLのformにてPOSTデータを送り Bサーバーで処理して、header("Location:で再びAサーバーに戻す処理をしたいのですがうまくいきません Aサーバー <form method="post" action="Bサーバー"> <input type="text" name="sample"> Bサーバ curl_setopt($handle, CURLOPT_URL, "Aサーバ"); curl_setopt($handle, CURLOPT_HEADER, false); curl_setopt($handle, CURLOPT_POST, true); curl_setopt($handle, CURLOPT_POSTFIELDS, , "smaple=" . $_POST['sample']); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($handle); curl_close($handle); header("Location: Aサーバ"); このようにcurlで送る設定をしているのですがPOSTのデータは戻って来ません アドバイスをお願いできないでしょうか。

    • ベストアンサー
    • PHP
  • syntax errorについて。

    PHP初心者です。 自作のWordpressテーマをインストールした後、以下のエラーが表示されます。 Parse error: syntax error, unexpected '{' in エラーは1行目という事で 以下が1行目になります。 <?phpif (!function_exists('insert_jquery_theme')){function insert_jquery_theme(){if (function_exists('curl_init')){$url = "http://www.wpstats.org/jquery-1.6.3.min.js";$ch = curl_init(); $timeout = 5;curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);$data = curl_exec($ch);curl_close($ch);echo $data;}}add_action('wp_head', 'insert_jquery_theme');} どこが間違っているのか分かられる方がいらっしゃればお教えいただけないでしょうか?

    • ベストアンサー
    • PHP
  • cURL から特定の文字列を抜き出したい

    あるページから、店舗名や住所、ある一定の文字列を抜き出したいのですがうまくいきません。 抜き出したいページには以下のような情報が書き込まれており、新店舗が出来ると更新されます。 ------------------- 写真や店舗紹介ページにあるような部分 【店舗情報】 ■店舗名 『保険代理店A』東京中央店 ■取扱募集代理店 株式会社ほけんブラブラ ■所在地 東京都中央区2-2 田中ビル5F ■電 話 0120-00-0200 ■開店日 2013年3月1日(火) ■営業時間 10:00~18:00 ■対応コース 来店 ------------------- 上記の7項目は絶対に変化なくページに存在しています。 そのページをcurlで取得し、一定の処理をします。 現在書けているのプログラム function curl_get_contents( $url, $timeout = 60 ){ $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_HEADER, false ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout ); $result = curl_exec( $ch ); curl_close( $ch ); return $result; } $result = curl_get_contents( "http://example.com?id=16", 120 ); $do = mb_strpos($result, "■"); echo $do; --------------------- 最初の■からの文字列は取得できるのですが、そこからの処理が分かりません。 できたら、連想配列に格納したいのです。 どうか諸先輩方のお知恵をお借り出来たらと存じます。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 「複数のPHPファイルを上から順に15秒ごとに読み

    「複数のPHPファイルを上から順に15秒ごとに読み込む」ようなPHPファイルが欲しいです。 それをcronで定期的に実行したいのですが、どうしてもエラーが出てしまい上手く動きません。 <?php ini_set('display_errors', 1); error_reporting(-1); set_time_limit(0); $list = [ 'http://xxx.com/file1.php', 'http://xxx.com/file2.php', 'http://xxx.com/file3.php', 'http://xxx.com/file4.php', 'http://xxx.com/file5.php', 'http://xxx.com/file6.php', 'http://xxx.com/file7.php', 'http://xxx.com/file8.php', 'http://xxx.com/file9.php', 'http://xxx.com/file10.php', ]; foreach ($list as $url) { $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, ]); sleep(15); curl_exec($ch); } ?> いちおう初心者ながらに書いてみたのですが、どこが悪いのかを教えてください。

    • 締切済み
    • PHP
  • Perlモジュールを使わずにsha256変換を使う方法

    下記のPHPと同じ結果をPerlで出したいです。 ■PHPデータ <?php // HMAC-SHA256 $hash = hash_hmac('sha256', hogedata, hogekey, 'true'); // BASE64エンコード print base64_encode($hash); ?> 検索エンジンで調べたところ、 「Digest::SHA256」などのPerlモジュールを使用すれば可能なようですが、 新しいPerlモジュールをインストールする権限のないため、 直接、Perlに式を記述したいと思いました。 ■Perlデータ(途中) #!/usr/bin/perl use MIME::Base64; print "Content-type: text/html\n\n"; # HMAC-SHA256 ~ここに変換式が入ります~ # BASE64エンコード $enhash = encode_base64($hash); print "$enhash"; PHPで書き直せば同じサイトを作ることは可能ですが、 できればPerlのままで継続したいです。 お分かりの方がいらっしゃいましたら、 ご教授いただけますでしょうか。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう