• 締切済み

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
  • 回答数1
  • ありがとう数1

みんなの回答

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

参考にしている情報が2008年と非常に古いものです。 APIが新しくなっているので、それに合わせてPHPを作成する必要があります。 詳しくはmixiを見て下さい。

moo9999
質問者

お礼

アドバイスありがとうございます。 実は他のものもいろいろと調査してみたのですが 私のレベルの低さもあり、mixiのAPIにつきましては MixiAPI.phpなどを含んだライブラリーなども検討しましたが なかなか把握できなく他の方が作成されたサンプルなどを 頼って試したりしている状況です。 今回の方法は使い物にならないようですので 何か分かりやすいサンプルなどがありましたら ご紹介頂ければと思います。

関連するQ&A

  • ライブドアブログに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
  • CakePHPのブログチュートリアルについて

    PHPフレームワークのCakeについて、質問させてください。 初心者ならだれもが一度は試すであろうhttp://book.cakephp.org/ja/view/219/Blogに掲載されているブログチュートリアルですが、下記環境で実行すると大量のエラーが出力されます。(添付画像参照) 環境:hetemlレンタルサーバー Apache 2.0.xx ver 4.4.2 ※CakePHPのトップページが正常に表示されること、tmpフォルダのパーミッションは正常に設定されていることは確認しています。 また、Viewで正常にデータを取得できているにもかかわらずデータ表示部分でエラーが表示されるため、変数$postsをvar_dumpしたところ、 Array ( [0] => Array ( [id] => Array ( [id] => 1 ) [title] => Array ( [title] => タイトル ) [body] => Array ( [body] => これは、記事の本文です。 ) [created] => Array ( [created] => 2009-08-08 21:56:50 ) [modified] => Array ( [modified] => ) ) [1] => Array ( [id] => Array ( [id] => 2 ) [title] => Array ( [title] => またタイトル ) [body] => Array ( [body] => そこに本文が続きます。 ) [created] => Array ( [created] => 2009-08-08 21:56:50 ) [modified] => Array ( [modified] => ) ) [2] => Array ( [id] => Array ( [id] => 3 ) [title] => Array ( [title] => タイトルの逆襲 ) [body] => Array ( [body] => こりゃ本当に面白そう!うそ。 ) [created] => Array ( [created] => 2009-08-08 21:56:50 ) [modified] => Array ( [modified] => ) ) ) となっていました。 これでは、チュートリアルに掲載されている、 <?php echo $post['Post']['id']; ?> ではなく、 <?php echo $post['id']['id']; ?> で呼び出さなくてはならなくなります。 これはどこかがおかしいのでしょうか?教えてください。

    • 締切済み
    • PHP
  • PHPの画像表示関連(?)プログラムで困っています

    初めまして、おはようございます。 私はhtmlを少しかじった程度です。phpに関しては、これから勉強しようと思っていますが現状ではここ数日webで調べてみた程度の知識しかありません。また、php自体も触れるのは初めてです。どうかご助力願えたらと思います。 現状 1)現在運営されているwebサイトに掲示板がいくつかあります。 そのうち、携帯やpcから画像投稿出来て新着なども表示される掲示板と、コメントのみで画像の投稿、表示が出来ない掲示板の2ヶ所があります。 2)表示させていない掲示板にも画像を投稿、表示させるようにしたい。 問題点 ・解決するためにどうしたらいいのか、また原因となっているプログラムが分からない 恐らく原因はこの辺りなんじゃないか、と思われる場所のプログラムは以下の通りです。 file名はthread_controller.phpになります。 <!---------------------thread_controller.php-----------------------> var $name = 'Threads'; var $paginate = array( 'limit' => 10, 'order' => array('Thread.created' => 'desc') ); var $uses = array('Thread', 'Comment', 'Pic'); var $components = array('Search.Prg'); var $presetVars = array( array('field' => 'content', 'type' => 'value'), ); function beforeFilter() { parent::beforeFilter(); $this->Auth->allow("*"); } function index($forum_id = null) { $this->Prg->commonProcess(); if (!$forum_id) { $this->Session->setFlash('ページが存在しません', 'error'); $this->redirect("/"); } $this->Thread->recursive = 1; $threads = array(); // multi threads if ($forum_id == 34 || $forum_id == 41 || $forum_id == 42) { $sql = 'select id from (select id, name, created from threads where forum_id = ' . $forum_id .' and locate("-", name) = 0 union all select min(id) as id, substring(name, 1, locate("-", name)-1) as name, created from threads where forum_id = '.$forum_id.' and locate("-", name) != 0 group by 2) Thread order by created'; $res = $this->Thread->query($sql); $ids = array(); foreach ($res as $thread) { $ids[] = $thread['Thread']['id']; } $threads = $this->paginate(array('Thread.forum_id' => $forum_id, 'Thread.id' => $ids)); $sql = 'select id, title, name from ( select id, substring(name, 1, locate("-", name)-1) as title, name, created from threads where forum_id = ' . $forum_id .' and locate("-", name) != 0 ) Thread order by title, id'; $res = $this->Thread->query($sql); $subthreads = null; $prev = null; foreach ($res as $thread) { if ($prev != null && $prev['Thread']['title'] == $thread['Thread']['title']) { $data = $this->Thread->read(null, $thread['Thread']['name']); $names = explode('-', $thread['Thread']['name']); $data['Thread']['name'] = $names[1]; $subthreads[$prev['Thread']['id']][] = $data; } else { $prev = $thread; } } for($i = 0; $i < count($threads); $i++) { $id = $threads[$i]['Thread']['id']; if (array_key_exists($id, $subthreads)) { $threads[$i]['Thread']['children'] = $subthreads[$id]; } } <!-------------------------------------------> もし、このコードが原因じゃないという場合、この辺りなんじゃないか? というような意見でも幸いです。宜しくお願いいします。m(_ _)m

    • 締切済み
    • PHP
  • jspのプログラムについて

    jspについて質問です。 現在入力されたパスワードとデータベースに保存してあるパスワードを比較して一緒であれば idを削除するというプログラムを組んでいます。 削除することはできないのですが、 比較がうまくいきません。 <% //postされたもの String id = request.getParameter("id"); String password =request.getParameter("password") Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection(urlやpassword、userが書いてある); request.setCharacterEncoding("utf8"); Statement st=conn.createStatement(); Statement stmt=conn.createStatement(); ResultSet res = st.executeQuery("select * from data where id ="+id); while(res.next()){ String pass =res.getString("pass"); //データベースからパスワードを取得 out.println("<td>" + password + "</td>"); out.println("<td>" + pass + "</td>"); if(password==pass){ //入力されたパスワードと比較 //ここにはidを削除する文が書かれている } } st.close(); conn.close(); やっているのですが、if文に入って削除してくれません。 out.printlnはいりませんがちゃんと値があっているか確かめたところ 入力された文字とデータベースに入っている文字がちゃんと表示されました。 教えてください。よろしくお願いします。

  • javascript と php の、フォームを使わない送受信について

    初めて質問します。わかりにくいかも知れませんが、どうぞよろしくお願いします。 当方、HTTPXMLオブジェクト(?)を使ってHTTP通信を試みていますが、phpでのPOST受信が出来ず困っております。 以下、要約したソースコードを掲載します。 javascript側----------------- post_data = 'user_id='+ user_id +'&password=' + password; //user_id,password共にテキストフォームに入力された変数です (中略) httpObj.open('POST','hoge.php',true); httpObj.send(post_data); //これで送信し (中略) a = httpObj.responceText //で受け取っています。 ---------------------------------- php側----------------------------- $user_id = $_POST['user_id']; $password = $_POST['password']; ~DB接続処理~ print $res; //$resはjavascriptに送る文字列です ---------------------------------- と言うような感じなのですが、 javascript側の最後の a にはちゃんと $res の内容が格納され、表示もされることを確認しているのですが、 php側の$_POST['user_id']に何も入らずnullのままで、どうしたらいいのか途方に暮れています…。 蛇足かも知れませんが、念のためにHTML側のテキストフォーム部のソースだけを書いておきます。 <input type="text" id="user_id">ユーザ名 <input type="password" id="pass">パスワード <input type="button" id="login" value="log in"> <form>タグは使わず、ボタンがクリックされたときに、テキストフォームの内容を読み取ってphpに値を投げると言うイベントハンドラ的な動作をしています。 フォームの内容はjavascriptで取れていますが、如何せんphpへ投げたときにphpが受け取ってくれない…… 長文申し訳ございません。回答のほう、よろしければお願いします。

  • jquery内でPHP変数の比較

    今、掲示板のようなものをPHPで書いてます。 ここで、書き込んだユーザがログインしてるユーザと同じだったら、削除ボタンを表示させたいです。 そこで以下のように書いてみましたが、$res1['user_id']がtest以外の時も削除ボタンが表示されてしまいます。 この問題を解決するにはどうすればよいのでしょうか。 ちなみに、$aには3次元配列が代入されています。 $(document).ready(function(){ $('.delbtn').css("display","none"); <?php foreach($a as $key => $res1) { ?> if("<?php echo $res1['user_id']?>" === "test") { $('.delbtn').css("display","inline"); } <?php } 38 ?>

    • ベストアンサー
    • PHP
  • php+MYSQL

    打ち込んだ後 var_dunpにてqueryの中身を確認したところ falseになってしまっていて失敗してしまいますどうしたらいいでしょうか? $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); ここがおかしいのかと思ってます <?php $link = mysql_connect('localhost','user','pass','dbname'); if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; if ( $subject !=='' && $honbun !=='' ) { $query = " INSERT INTO ogawa ( " ."subject," ."honbun," .") VALUES ( " . "'" . mysqli_real_escape_string( $link, $subject ) ."', " . "'" . mysqli_real_escape_string( $link, $honbun ) . "'" ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysqli_query($link,$query); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"><input type="hidden" id="auth_token" name="auth_token" value="04d8fdd9da7e7b2cba8698a7cffda5b427b29b5b"><input type="hidden" id="auth_token" name="auth_token" value="04d8fdd9da7e7b2cba8698a7cffda5b427b29b5b"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8">

  • php+mysql

    $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); val_dunpを使い確認したところ bool(false) >となってしまい失敗します falseに返さないようにするにはどうしたらいいでしょうか? 簡易掲示板作成 タイトル 本文記載後下にタイトル 本文 書き込み日時が 書き込まれていく仕組みです <?php $link = mysql_connect('localhost','user','pass','dbname'); if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; if ( $subject !=='' && $honbun !=='' ) { $query = " INSERT INTO test ( " ."subject," ."honbun," .") VALUES ( " . "'" . mysql_real_escape_string( $link, $subject ) ."', " . "'" . mysql_real_escape_string( $link, $honbun ) . "'" ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysql_query($link,$query); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].'<br>'; } ?> </body> </html>

    • ベストアンサー
    • MySQL
  • php+MYSQL

    タイトル 本文 書き込み後保存を押すと 下に書き込み保存されていく形です タイトル 本文 書き込み日時 タイトル 本文 書き込み日時 エラー自体は出てないのですが書き込みが反映されません val_dunpで調べたところ resource(7) of type (mysql result) > このように出てきましたなにか文自体に必要なものがないのでしょうか? <?php $link = mysql_connect('localhost','user','pass'); if (!$link) { die('接続に失敗しました。'.mysql_error()); } $db_selected = mysql_select_db('ogawa',$link); if(!$db_selected) { die('データベース選択に失敗しました。'.mysql_error()); } $res = mysql_query('SELECT * FROM test'); if (!$res) { die('クエリーが失敗しました。'.mysql_error()); } if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; $kakikomi = $_POST['kakikomi']; if ( $subject !=='' && $honbun !=='' && $kakikomi !=='' ) { $query = " INSERT INTO test ( " ."subject," ."honbun," ."kakikomi," .") VALUES ( " . "'" . mysql_real_escape_string( $link, $subject ) ."', " . "'" . mysql_real_escape_string( $link, $honbun )."'," . "'" . mysql_real_escape_string( $link, $kakikomi)."'," ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysql_query($query,$link); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT id,subject,honbun,kakikomi FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].''.$val['kakikomi'].'<br>'; } ?> </body> </html>

  • Javascript+PHPでのデータの受け渡し

    はじめまして。PHP+MYSQLについては、まだ知識があるものの、Javascriptについては 初心者で知識不足の者です。 twitterのフォローのようなプログラムをphp+mysqlで作成したのですが これをJavascriptを使用して、ユーザーには画面をまたがずに 「フォローする」⇒「フォローしました」 とさせたいのですが、どうすればよいか行き詰ってしまいました。 ちなみに、php+mysqlのみでは現在下記のとおりになっています。 ■フォロー登録画面  <form name="register" action="adduser.php" method="post">  <input name="account_id" type="hidden" value="<?= $_SESSION['users_id'] ?>">  <input name="follow_id" type="hidden" value="<?php varout($users['users_id']) ?>">  <input name="subtitle" type="hidden" value="$subtitle">  <input type="submit" value="フォローする"> ■mysqlへinsertする画面(adduser.php) $query = "INSERT INTO watchuser SET user_from=?,user_to=?,created_at=NOW()"; execQuery($db, $query, array($account_id, $follow_id)); javascriptで制御する為に フォロー登録画面を下記にように変更し、 <a href="javascript:follow('<?php varout($users['users_id']) ?>');" class="btnBlue" title="フォローする">フォローする</a> javascript内に、下記のように記述しているのですが 動作せずに困っております。 どなたかお詳しい方、ご連絡いただけますと幸いです。 ※【補足】jqueryは、jquery-1.7.1.min.jsを読み込んでいます function follow(account) { var url ='/adduser.php'; var data = 'account=' + account; var btn = $('follow_btn'); var follower_num = $('follow_id'); if (follower_num != null) { var follower_num_value = parseInt(follower_num.innerHTML); } new Ajax.Request(url, { method: 'post', parameters: data, onLoading: function() { btn.innerHTML = '<img src="/images/loading.gif" />'; }, onComplete: function(httpObj) { if (httpObj.status == '200') { btn.innerHTML = '<span class="btnRed">フォローしました!</span>'; if (follower_num != null) { follower_num.innerHTML = follower_num_value + 1; } } else { var res = httpObj.responseText; if (res) { btn.innerHTML = '<span class="error">' + res + '</div>'; } else { btn.innerHTML = '<span class="error">エラー</div>'; } } } }); }

専門家に質問してみよう