Windows Live WrightがWordPressに接続できない。

Published by:

かなり前からWLWでWordPress書く習慣があるが,最近一部のWordPressサイトはwlwに接続できない問題発生,サーバー側に接続しようとすると以下のようなメッセージが表示され接続(投稿)出来ない。
———————————————————————————————————————

ログイン中に予期しないエラーが発生しました。
サーバーの応答が無効ですーブログサーバーから受信した
blogger.getUsersBlogsメソッドへの応答が無効です。
invalid response document returned from XmlrRpc server

———————————————————————————————————————

原因はXML-RPC戻るXMLテキストの最后は破损。なんどもGoogleしたが、対策が見つからなかった。今天は遂に解决した。

オリジナルの対策は以下リンクにあるようです:

https://www.corelan.be/index.php/2008/10/14/windows-live-writer-unable-to-connect-to-wordpress-blog/

This is caused because something (a plugin ? my webserver (IIS) ? something else ?) decided to add UTF-8 BOM to the XML-RPC response. Result : the xml response is 3 bytes longer than expected, which causes the xml response to be truncated.

原因はIISの问题らしい。しかしこちら使うのはLAMP,でも対策は有効だ。

解決策:
(1)wp-includesパスにclass.IXR.phpファイルをみつけ,
(2) $length = strlen($xml);  を $length = strlen($xml)+3 に書換え

TinyWebDB for App Inventor Sample Project

Published by:

App Inventor Sample Project

New Project

Start a new project from Project menu.

Put TinyWebDB component on screen and set ServiceURL to your WordPress Server with TinyWebDB API available.

Behavior Design

Put TinyWebDB component on screen and set ServiceURL to http://tinywebdb.ml/api

(or your WordPress Server with TinyWebDB API available)

スクリーンショット 2016-11-02 15.19.36

  • GetValue : get TinyWebDB value from WordPress server and set to TextBox.
  • StoreValue : Store TextBox  value to WordPress Server TinyWebDB plugin.

 

Programming

  • GetValue : get TinyWebDB value from WordPress server and set to TextBox.
  • StoreValue : Store TextBox  value to WordPress Server TinyWebDB plugin.

スクリーンショット 2016-11-02 15.19.11

Download

Download TinyWebDB Demo Code available on github.

下記のDownloadから、App Inventorで作ったAndroid test app サンプル を参考に、 ご自分のappを作る.

https://github.com/edu2web/TinyWebDB_Tester

tinywebdbdemo.aia is a minimal App Inventor project for WordPress TinyWebDB API Test.

注意点として、APIのURLは、最後の”/” を削除しでください。

Refer to Plugin URI to get sample Android test app which make by App Inventor, to create your own app.

Be sure to remove “/” on the tail of URL.

You need a WordPress Server with TinyWebDB API available, you can use my test server http://tinywebdb.ml/api , or install and setup your server follow steps on https://wp-api.net/tinywebdb-api/ .

Related links

WP- REST-API Setup

Published by:

To Preparation WordPress wp-api,  you have three setup steps:

  1. JSON REST API
  2. Authenticate
  3. Permalink

JSON REST API

Grab the latest version of JSON REST API on WordPress plugin directory. Install and activate it.

Authenticate

There are three ways you can authenticate.

Using the cookies

This is one method not widely used when working with APIs. When a user navigates on the web, pages tend to store data on users side. The cookie method here is a bit different by using the nonces method.

OAuth

This plugin implements the version 1.0a of OAuth. This method is widely used. Google, Facebook, Twitter and Flickr use OAuth for third party authentication.

Basic Authentication

Using this method you have to send your username and password each time you make a request. Client tools for REST testing usually have this method implemented themselves. This method is mainly used when developing. Is rarely used on production. On production consider using OAuth.

the Basic Authentication plugin only on it’s GitHub repository.

git clone https://github.com/WP-API/Basic-Auth basicAuth

Permalink

Change the permalink configuration to any other that not default.

WP- REST-API with AppInventor

Published by:

AppInventorはAndoridのApp作りに簡単な環境です。WordPressはWebコンテンツを作るに最適な環境。

AppInventor is a easy way to creating an Android app from web browser.  WordPress is a best web content management tool.

WP- REST-APIは、両者の長所を連携し、WordPressをAppInventorのWebサービスとして利用するためのAPIとして利用する。

WP- REST-API use you WordPress as a web service for AppInventor App.

API endpoint

 

Posts

Get

Post

Firefox_Screenshot_2015-09-05T10-22-07.193Z

Delete

Media

Post

Firefox_Screenshot_2015-09-05T10-24-14.020Z

Users

Get

WP- REST-API with Python

Published by:

API endpoint

import http.client
 
def main():
    conn = http.client.HTTPConnection("wp-api.pw")
    
    conn.request("GET", "/wp-json/")
    res = conn.getresponse()
    print(res.status, res.reason)
    print(res.read())
    conn.close()
 
if __name__ == "__main__":
    main()

Posts

Get

Post

Delete

Media

Post

Users

Get

WP- REST-API with cURL

Published by:

API endpoint

[chen@luna ~]$ curl -l http://wp-api.pw/wp-json/

Posts

Get

The Posts endpoint returns a Post Collection containing a subset of the site’s posts.

[chen@luna ~]$ curl -l http://wp-api.pw/wp-json/posts

Post

Create a Post Requires authentication

[chen@luna ~]$ cat data.json
{
    "title": "This is a post",
    "content_raw": "This is some content"
}
[chen@luna ~]$ curl --user test:password -X POST http://wp-api.pw/wp-json/posts --data @data.json

Delete

Delete a Post Requires authentication

[chen@luna ~]$ curl --user test:password -X DELETE http://wp-api.pw/wp-json/posts/229
{"message":"Deleted post"}

Media

Post

To create the raw data for an attachment. This is a binary object (blob), such as image data or a video.

[chen@luna ~]$ curl --user test:password -H 'Content-Type:image/jpeg' -H 'Content-Disposition: attachment; filename="test1551.jpg"' -X POST http://wp-api.pw/wp-json/media --data-binary @/home/chen/IMG_1551.jpg

Users

Get

This endpoint offers a permalink to get the current user, without needing to know the user’s ID.

get user self

[chen@luna ~]$ curl --user test:password http://wp-api.pw/wp-json/users/me

get user list

[chen@luna ~]$ curl --user test:password http://wp-api.pw/wp-json/users

WP- REST-API with Java

Published by:

API endpoint

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://wp-api.pw/wp-json/");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Posts

Get

The Posts endpoint returns a Post Collection containing a subset of the site’s posts.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://wp-api.pw/wp-json/posts");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Post

Create a Post Requires authentication

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            String content = '{"title": "This is a post","content_raw": "This is some content"}';
            URL url = new URL("https://wp-api.pw/wp-json/posts");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("test:password".getBytes(StandardCharsets.UTF_8)));
            conn.setRequestProperty("Content-Length", String.valueOf(content.getBytes("UTF-8").length));
            conn.setDoOutput(true);
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
            wr.writeBytes(content);
            wr.flush();
            wr.close();
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Delete

Delete a Post Requires authentication

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://wp-api.pw/wp-json/posts/229");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("DELETE");
            conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("test:password".getBytes(StandardCharsets.UTF_8)));
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Media

Post

To create the raw data for an attachment. This is a binary object (blob), such as image data or a video.

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            char[] buffer = new char[1024];
            StringWriter writer = new StringWriter();
            FileReader fileReader = new FileReader("/home/chen/IMG_1551.jpg");
            for (int n = 0; -1 != (n = fileReader.read(buffer));) {
                writer.write(buffer, 0, n);
            }
            fileReader.close();
            String content = writer.toString();
            URL url = new URL("https://wp-api.pw/wp-json/media");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "image/jpeg");
            conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("test:password".getBytes(StandardCharsets.UTF_8)));
            conn.setRequestProperty("Content-Length", String.valueOf(content.getBytes("UTF-8").length));
            conn.setDoOutput(true);
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
            wr.writeBytes(content);
            wr.flush();
            wr.close();
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Users

Get

This endpoint offers a permalink to get the current user, without needing to know the user’s ID.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://wp-api.pw/wp-json/users/me");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("test:password".getBytes(StandardCharsets.UTF_8)));
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

[自分用メモ] Amazon EC2で、あるアカウントのInstansをイメージ保存し、それを別アカウントにコピーする | Ultraひみちゅぶろぐ

Published by:

仕事でAmazon EC2を使っている。その中で、あるアカウントAが所有するInstanceのイメージを作成し、それをアカウントBで使用するという場面が出てきた。要するに、あるアカウントが作成したクラウド内の仮想マシンをコピーして別アカウントで使用したいということだ。

Source: [自分用メモ] Amazon EC2で、あるアカウントのInstansをイメージ保存し、それを別アカウントにコピーする | Ultraひみちゅぶろぐ

Skip to toolbar