SQLの窓

2013年06月09日


Win8 ストアから Post 投稿

Get 部分を追加しました

Windows8(C#) ストアアプリ : HttpClient で Get と Post する簡易クラス


非同期のメソッドを定義する場合は、async Task<T> とします。大抵の場合、メソッド化しておいたほうが使いやすいものとなります。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace LBOX_Http
{
	public class Lbox
	{
		public static async Task<string> Post(string url, Dictionary<string, string> param )
		{
			string result = "";

			try
			{
				HttpClient httpClient = new HttpClient();
				httpClient.MaxResponseContentBufferSize = int.MaxValue;
				HttpContent content = new FormUrlEncodedContent(param);
				var response = await httpClient.PostAsync(url, content);
				String text = await response.Content.ReadAsStringAsync();

				result = text;
			}
			catch (Exception Err)
			{
				result = "ERROR:" + Err.Message;
			}

			return result;

		}
	}
}


▼ 呼び出し方法
String url = "投稿先の URL";
var param = new Dictionary<string, string>();
param.Add("u", "入力文字列");
Response.Text = await Lbox.Post(url, param);

u は、HTML 定義で FORM 内の INPUT の name 属性に割り当てられた文字列です。

関連する記事

Win8 ストア : HttpClient + XDocument で RSS の取得
Win8 ストア : UrlEncode と UrlDecode


posted by lightbox at 2013-06-09 22:08 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする

2013年06月08日


Android から Post 投稿 / HttpPostAndXml extends AsyncTask<Map, Void, Document>

Android の インターネットアクセスでは、AsyncTask がついて回るので、とにかくコンパクトにして、ADT の支援機能をうまく使って記述できるように頑張ってみました。とにかく、『使える』事を最優先にすると、目的毎にクラスを作ったほうが良いので、結果が XML の Documnet で返ってくるようにしています。( もちろん、JSON 用なら別に作成します )
package com.example.httppost;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import android.os.AsyncTask;
import android.util.Log;

public class HttpPostAndXml extends AsyncTask<Map, Void, Document> {

	@Override
	protected Document doInBackground(Map... params) {
		
		Document xml_data = null;
		
		Map<String,String> myArg = params[0];

		try {
			// ターゲット
			URL url = new URL(myArg.get("url"));
			// 接続オブジェクト
			HttpURLConnection http = (HttpURLConnection)url.openConnection();
			http.setConnectTimeout(30000);
			http.setReadTimeout(30000);
			http.setDoInput(true);	// application/x-www-form-urlencoded がセットされる
			http.setRequestMethod("POST");
			
			OutputStreamWriter osw = new OutputStreamWriter(http.getOutputStream());
			BufferedWriter bw = new BufferedWriter(osw);
			
			Iterator<String> it =  myArg.keySet().iterator();
			String key = null;
			String value = null;
			String data = "";
			while(it.hasNext()) {
				key = it.next().toString();
				if ( key.equals("url") ) {
					continue;
				}
				value = myArg.get(key);
				if ( !data.equals("") ) {
					data += "&";
				}
				data += key + "=" + URLEncoder.encode(value, "utf-8") ;
			}
			
			Log.i("",data);
				
			bw.write( data );

			bw.close();
			osw.close();
			
			DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = dbfactory.newDocumentBuilder();
			// InputStream から Documentオブジェクトを取得
			xml_data = builder.parse(http.getInputStream());
			// 接続解除
			http.disconnect();
		}
		catch(Exception e) {
			Log.i("MyList", e.getMessage());
		}
		return xml_data;
	}
	

}


呼び出し方法
package com.example.httppost;

import java.util.HashMap;
import java.util.Map;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	
	// ボタンのプロパティに設定するイベント
	public void postAction(View v) {
		
		EditText et = (EditText)this.findViewById(R.id.editText1);
		
		Map<String,String> map = new HashMap<String,String>();
		map.put("url", "呼び出す URL");
		map.put("u", et.getText().toString());
		
		new HttpPostAndXml(){

			@Override
			protected void onPostExecute(Document result) {

				if ( result == null ) {
					return;
				}
				
				// ルート要素
				Element root = result.getDocumentElement();
				NodeList node_list = root.getElementsByTagName("item");
				for( int i = 0; i < node_list.getLength(); i++ ) {
					
					NodeList nl = ((Element)node_list.item(i)).getElementsByTagName("title");
					Log.i("MyList", nl.item(0).getFirstChild().getNodeValue());		
				}
				
			}
			
		}.execute(map);
	}

}

HttpPostAndXml の無名クラスで、http のアクセス部分は内部の非同期部分にまかせて、結果部分のみ Override しています。実行時の引数としては、HashMap に "url" を含ませて、それ以外は全て送信データとして UTF8 で UrlEncode して送信しています。

テスト画面定義
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:onClick="postAction"
        android:text="Button" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_alignRight="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="20dp"
        android:ems="10"
        android:gravity="top|left"
        android:height="200dp"
        android:inputType="textMultiLine"
        android:scrollbars="vertical" >
    </EditText>

</RelativeLayout>


posted by lightbox at 2013-06-08 21:43 | Android | このブログの読者になる | 更新情報をチェックする

2013年06月07日


Win8ストア XAML の AppBarButtonStyle のContent に指定する 16進数 Unicode の取得





インターネットで使う特殊文字一覧 ♔ ♕ ♖ ♗ ♘ ♙ ♚ ♛ ♜ ♝ ♞ ♟ より適当に文字列をコピーして以下の大きなフィールドに貼り付けて変換して下さい。

※ そのまま貼ってもいいんですが、StandardStyles.xaml での定義ではコードを使っているので。
※ 通常の Content でも使えますが、AppBarButtonStyle で使うと良いと思います。


posted by lightbox at 2013-06-07 02:43 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする

XAML の 各属性を別の行に配置する Visual Studio の設定

こんな感じ。



デフォルトだと、右へ右へ長くなるので、XAML の属性内容に慣れないうちは、何がなんだか解らないので以下のように設定します。

テキストエディター内の 『XAML』



書式設定の『全般』の内容




XAMLの『その他』の内容

とりあえず、名前付けが面倒な場合『要素に自動的に名前を付ける

posted by lightbox at 2013-06-07 00:18 | VS(C#) | このブログの読者になる | 更新情報をチェックする

2013年06月01日


さくらのサーバーで hash_hmac のアルゴリズムで使えるもの

実行結果

※ Windows には 5.4.13 をインストールしていますが、少し種類は多かったです。
※ PHP マニュアル( hash_hmac )

▼ ソースコード
<?php

$arr = hash_algos();

print "<pre>";
print phpversion(). "\n";

print_r($arr);

foreach( $arr as $algo ){
	print "$algo => ";
	print hash_hmac( $algo, 'password', 'lightbox' ) . "\n";
}

print "</pre>";

?>


現時点での実行結果
5.2.17
Array
(
    [0] => md2
    [1] => md4
    [2] => md5
    [3] => sha1
    [4] => sha256
    [5] => sha384
    [6] => sha512
    [7] => ripemd128
    [8] => ripemd160
    [9] => ripemd256
    [10] => ripemd320
    [11] => whirlpool
    [12] => tiger128,3
    [13] => tiger160,3
    [14] => tiger192,3
    [15] => tiger128,4
    [16] => tiger160,4
    [17] => tiger192,4
    [18] => snefru
    [19] => gost
    [20] => adler32
    [21] => crc32
    [22] => crc32b
    [23] => haval128,3
    [24] => haval160,3
    [25] => haval192,3
    [26] => haval224,3
    [27] => haval256,3
    [28] => haval128,4
    [29] => haval160,4
    [30] => haval192,4
    [31] => haval224,4
    [32] => haval256,4
    [33] => haval128,5
    [34] => haval160,5
    [35] => haval192,5
    [36] => haval224,5
    [37] => haval256,5
)
md2 => d87434ac40cbf0de2773e4c51cce4484
md4 => 7453709872da8a97250079493e9bcd5a
md5 => 0b8d1a7cf74154638a19eb9958b8e475
sha1 => 48896bb7c5fdd2a07956c906439e6ccacde0f008
sha256 => e6fa0d3621e86d2f098b8536438eda1eb7a5506447e02a2d3f61d31ec5d33ed8
sha384 => 260156d96024444ff6057dde5a3a13c3805019aeeb16b494ab95a79f2fb69d67fbb2513d6644b5f48d7af1560c93eb0f
sha512 => 1356741ab6091d5a5ceae4c2748669d0659501dfa66b1347f7e1634f3adbf1e6b1c37aae609bbc70b31107ce1eacf4761ed09d919b1a71d11baa3f79b94d24f1
ripemd128 => 3ee49d45c2f9ec77bb39a6a29569663e
ripemd160 => 1d7d19bdbe034b8bd611042f8edb55aa8b6d05e4
ripemd256 => 7b089b287a192245a5c0c8591d5c2ed98248a787639902654f8446b42c0f258b
ripemd320 => f493195c3dfca08e42ed78403eed74e6997a8728e0cd95c33745f5207ac95cdacb68ec65ee4bf4e9
whirlpool => ba74027a5597e9af0dc4463562d03cf793435223619ac972aab58fae09fb9dcc604d06a0a2d6ef08b370bee26a11241f923494a8168bc07a093a7c4247752e74
tiger128,3 => a8d42bebcba55ae2122b024d42950cc0
tiger160,3 => 3a39a524ae0d95497953abd85f8789fed89dd148
tiger192,3 => 1b9000939041c3a062542f1ba6cfa7468fd12ca3dfb27eb4
tiger128,4 => 30e2783e192892b264cbf874bef01fe7
tiger160,4 => a773b951d8bc513c376b10d7410a942d4a9481d0
tiger192,4 => a87d8642883c089a5d3bba866a10c6c9f020c93b2b212e08
snefru => 5055d3627109b60ca2282a23a69b5667ef0bac5ce97d152cad9d0b218d6c1c57
gost => f15fe74cc0ce8b20937404fd5dceee19a5141b8172014cf1f2e2721915021526
adler32 => 0abc0248
crc32 => 44f03d85
crc32b => 3207591a
haval128,3 => b2f45056c82502f4b533230cfada72ff
haval160,3 => 18e196ca1065f13f481d21942c96485dba8ad660
haval192,3 => a6043af26f30ef0fd2a123d208a7f7301d541ae1c8e7ce3f
haval224,3 => b210b70701b80a1534268182e9dc96cadb5dd741bca45b0212c27e79
haval256,3 => c0ae630d0a85cc817083284a1abe29d6910f9336c6877a8efe13434e70936db4
haval128,4 => 25af3633e1af7f6140a2610ee64c4495
haval160,4 => 7f6204854d8e8932324dd670912492da37fe9d0f
haval192,4 => 6cdcf6775f33dce2e2733435628683b1bf7b338b0f1c1437
haval224,4 => de8240dc4402666410de619dd83d6589dcdcca1b39b8b679a1b1d22d
haval256,4 => 83dee3d5886e148e93800b01f7d96bbaf8ab8a0691d2e182865cb5b55947542c
haval128,5 => 8a6ddf70531bdb18715fbc1ff0ff3e65
haval160,5 => 7a9c0cb7c91a10a6b9864fe58866a5cc19f4f16c
haval192,5 => 8189cdab2b8fd932977517e64f84aa2f6586c28edc1b2453
haval224,5 => 9f62b2c730da14bcf9edfc14ce58c225695a4fb6988079b7a3ce8cdd
haval256,5 => 4fa308845bb7087c0bb732f674c67a9aa84fd9ed2a1a9cc7375e216d6af3ace6



posted by lightbox at 2013-06-01 13:04 | PHP | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり