WordPressへ外部から投稿を可能にする、 blogger_newPost() ですが、
投稿日時をMySQLのシステム日時から自動で取得します。
過去記事を外部投稿したい場合、これでは不都合です。
投稿日時を指定できるように改良していました。
class-wp-xmlrpc-server.php から抜粋
2014年7月29日火曜日
2014年6月10日火曜日
7セグ LED 代替部品
7セグLEDを利用している製品は数多く世に出回っていますが、大手部品メーカーは7セグLEDの生産を中止し始めています。
生産コストが高くて、儲からないのでしょうね。
7セグLEDの代替部品をさがしたら、アマゾンで売られていました。
既存の製品の大幅な設計変更もなく、コストダウンもできそうです。
助かります。
- 7Segment mold cover for Chip LED. チップLED用 7セグ樹脂カバー 7SWシリーズ 文字高7mm 3桁 厚型
- 7Segment mold cover for Chip LED. チップLED用 7セグ樹脂カバー 7SWシリーズ 文字高7mm 2桁 薄型
- 7Segment mold cover for Chip LED. チップLED用 7セグ樹脂カバー 7SWシリーズ 文字高7mm 3桁 薄型
- 7Segment mold cover for Chip LED. チップLED用 7セグ樹脂カバー 7SWシリーズ 文字高14mm 2桁 薄型
- 7Segment mold cover for Chip LED. チップLED用 7セグ樹脂カバー 7SWシリーズ 文字高14mm 3桁
既存の製品の大幅な設計変更もなく、コストダウンもできそうです。
助かります。
2014年4月24日木曜日
Window server 2012 R2 で、Monacaデバッガー Window8アプリのデバッグ
MonacaデバッガーをWindows Server 2012 R2 にインストールして実行してみた。
起動するとログイン
Windows Server 2012 R2の開発者用ライセンスが必要とのメッセージが出て、取得しを試みたところ、以下のメッセージが出た。うーん残念。
それもそうかな。
MonacaのWindowsアプリはWindows8向けになっているので、Windows Server 2012 R2でMonacaデバッガーを実行させるには、それなりの準備が必要なようだ。
Windows Server 2012 R2でWindows8のアプリを動作させるには、「機能」を追加してあげる必要がると思われる。
これはWindows Server 2008でWindows7のアプリを動作させる時と同じ。
以下のサイトを参考しにして、機能を追加してみた。
Windows Server 2012でWindows 8で利用できる機能を追加する
Windows Server 2012 R2
Visual Studio 2010 C#.NET で WordPress に自動投稿するプログラム
Visual Studio 2010 C#.NET で WordPress に自動投稿するプログラムを作るべく調査しまいた。
以下のサイトを参考にしました。
http://www.moonmile.net/blog/archives/1284
XML-RPCを使います。
参考サイトに従ってC#のプロジェクトをダウンロードしてコンパイルしました。
コンパイルを試した結果、.NET Framework 4ではうまくいきません。
.NET Framework 3.5で動作確認ができました。
現時点でのxml-rpc.netのバージョンは.2.5.0でした。
参考サイトのソースを少し変更して、コマンドプロンプトからすべて引数で動くように改修しました。
- サンプルコード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CookComputing.XmlRpc;
namespace WP_Post
{
class Program
{
static void Main(string[] args)
{
Program pg = new Program();
try
{
pg.url = args[0]; //<投稿先のURL/xmlrpc.php/>
pg.username = args[1]; //ブログのユーザー名
pg.password = args[2]; //ブログのパスワード
string title = args[3]; //タイトル
string content = args[4]; //記事内容
pg.categoryID = int.Parse(args[5]);//カテゴリID
// 投稿
pg.BllogerNewPost(title, content);
}
catch (Exception ex)
{
Console.WriteLine("エラー:" + ex.Message);
return;
}
}
// ユーザー名
string username = "<ブログのユーザー名>";
// パスワード
string password = "<ブログのパスワード>";
// 投稿先のURL
string url = "<投稿先のURL>";
// 投稿カテゴリID
int categoryID = 0;
public void BllogerNewPost(string title, string content)
{
//プロキシクラスのインスタンスを作成
IBlogger proxy =
CookComputing.XmlRpc.XmlRpcProxyGen.Create<IBlogger>();
//URLを指定
proxy.Url = url;
int id = 0;
// content を生成
content = string.Format("<title>{0}</title>", title)
+ string.Format("<category>{0}</category>", categoryID)
+ content;
//blogger.getRecentPostsを呼び出す
id = proxy.newPost(
"", // WordPressの場合は無視
"1", // 念のため1にしておく
username,
password,
content,
false);
//結果を表示する
Console.WriteLine("id: " + id);
}
}
public interface IBlogger : IXmlRpcProxy
{
/// <summary>
/// 新規投稿
/// </summary>
/// <param name="appkey">無視</param>
/// <param name="blogid">無視</param>
/// <param name="username">ユーザー名</param>
/// <param name="password">パスワード</param>
/// <param name="content">本文</param>
/// <param name="publish">公開するかどうか</param>
/// <returns>エントリのIDを返す</returns>
[XmlRpcMethod("blogger.newPost")]
int newPost(
string appkey,
string blogid,
string username,
string password,
string content,
bool publish);
}
}
2014年4月8日火曜日
VBA エクセルマクロでCDOを使ったメール送信プログラム
BASP21を使ったメール送信プログラムは結構存在しますが、WinodwsにCDOが標準搭載されてからは、CDOを使っプログラムもリリースされるようになりました。
以下にサンプルプログラムを用意しました。
ヒントになればと思います。
GmailとYahoo mailで試したところ、本文のCRLFの扱いの違いがありました。
改行コードCRLFをLFに変換する機能は有った方が良いようです。
SMTPサーバーのプラットフォームの違いなのかもしれません。
サンプルプログラム
Option Explicit
'参照設定でCDOを参照しておくこと
Public passwd As String
Public sw As Byte
Sub MySendMail()
Dim ret As String
Dim szLogfile As String
Dim szServer As String, szTo As String, szFrom As String
Dim szSubject As String, szBody As String, szFile As String
Dim flBody
Dim i As Long
Dim fs, a As Object
Dim oMsg As New CDO.Message
Dim szCC As String, szBCC As String
On Error GoTo Err_Handler
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(Worksheets("設定").Cells(27, 1).Value, True) 'ログファイル
passwd = ""
oMsg.Configuration.Fields.Item(cdoSendUsingMethod) = cdoSendUsingPort '2
oMsg.Configuration.Fields.Item(cdoSMTPServer) = Worksheets("設定").Cells(11, 1).Value 'SMTPサーバー名
oMsg.Configuration.Fields.Item(cdoSMTPServerPort) = Worksheets("設定").Cells(13, 1).Value 'ポート番号
oMsg.Configuration.Fields.Item(cdoSMTPConnectionTimeout) = 60 'タイムアウト値
If Worksheets("設定").Cells(7, 1).Value <> "" Then 'CC
oMsg.CC = Worksheets("設定").Cells(7, 1).Value
End If
If Worksheets("設定").Cells(9, 1).Value <> "" Then 'BCC
oMsg.BCC = Worksheets("設定").Cells(9, 1).Value
End If
oMsg.Configuration.Fields.Item(cdoSMTPAuthenticate) = Worksheets("設定").Cells(15, 1).Value 'SMTP認証
'要パスワード認証の場合
If Worksheets("設定").Cells(17, 1) = 1 Then
UserForm1.Show
If sw = 1 Then
oMsg.Configuration.Fields.Item(cdoSendPassword) = passwd
Else
MsgBox "送信処理をキャンセルしました。"
GoTo Exit_sub
End If
End If
If Worksheets("設定").Cells(21, 1) = 1 Then
oMsg.Configuration.Fields.Item(cdoSMTPUseSSL) = True 'SSL暗号化
Else
oMsg.Configuration.Fields.Item(cdoSMTPUseSSL) = False 'SSL暗号化しない
End If
oMsg.Configuration.Fields.Item(cdoLanguageCode) = Worksheets("設定").Cells(23, 1).Value '文字コード
oMsg.Configuration.Fields.Update
' メール送信結果を記録するファイル名を指定します。
szServer = Worksheets("設定").Cells(11, 1) ' SMTPサーバ名
'
With Worksheets("宛名及び置換文字")
If .Cells(1, 3) & .Cells(1, 7) = "" Then
MsgBox "タイトルとFROMを入力してください"
GoTo Exit_sub
Else
If MsgBox("タイトル:" & .Cells(1, 3) & vbCrLf & "送信元:" & .Cells(1, 7) & vbCrLf & vbCrLf & "上記でよろしいですか?", _
vbOKCancel, "確認") = vbCancel Then
GoTo Exit_sub
End If
End If
szSubject = .Cells(1, 3) ' 件名
szFrom = .Cells(1, 7) ' 送信元
If .Cells(1, 10) = "高" Then
oMsg.Fields("urn:schemas:mailheader:Importance") = "High"
oMsg.Fields("urn:schemas:mailheader:Priority") = 1
oMsg.Fields("urn:schemas:mailheader:X-Priority") = 1
oMsg.Fields("urn:schemas:mailheader:X-MsMail-Priority") = "High"
oMsg.Fields.Update
End If
If Worksheets("設定").Cells(19, 1).Value = "" Then
oMsg.Configuration.Fields.Item(cdoSendUserName) = Cells(1, 7).Value 'メールアドレス
Else
oMsg.Configuration.Fields.Item(cdoSendUserName) = Worksheets("設定").Cells(19, 1).Value 'ログインID
End If
oMsg.Configuration.Fields.Update
oMsg.From = szFrom
oMsg.Subject = szSubject
i = 3
Do While .Cells(i, 1) <> "END"
If .Cells(i, 1) = "○" Then
szTo = .Cells(i, 5) ' 宛先
szBody = .Cells(i, 6) ' 本文
If Worksheets("設定").Cells(25, 1).Value = 1 Then '改行コードCRLF
szBody = Replace(szBody, vbLf, vbCrLf)
End If
szFile = .Cells(i, 11) '添付ファイル
oMsg.To = szTo
oMsg.TextBody = szBody
If szFile <> "" Then
oMsg.AddAttachment szFile
End If
On Error GoTo ErrHandler1
oMsg.Send
.Cells(i, 1) = "完了"
cont1:
End If
i = i + 1
Loop
End With
' パラメータエラーのときは、戻り値にエラーメッセージが返ります。
MsgBox "終了しました"
GoTo Exit_sub
ErrHandler1:
MsgBox "エラー:" & Err.Number & vbCrLf & Err.Description
a.WriteLine (Date & " " & Time & " " & Err.Number & "-" & szTo & "-" & Err.Description)
Worksheets("宛名及び置換文字").Cells(i, 1) = "エラー"
Resume cont1
Err_Handler:
MsgBox Err.Description, vbCritical, "Error"
GoTo Exit_sub
Exit_sub:
a.Close
End Sub
以下にサンプルプログラムを用意しました。
ヒントになればと思います。
GmailとYahoo mailで試したところ、本文のCRLFの扱いの違いがありました。
改行コードCRLFをLFに変換する機能は有った方が良いようです。
SMTPサーバーのプラットフォームの違いなのかもしれません。
サンプルプログラム
Option Explicit
'参照設定でCDOを参照しておくこと
Public passwd As String
Public sw As Byte
Sub MySendMail()
Dim ret As String
Dim szLogfile As String
Dim szServer As String, szTo As String, szFrom As String
Dim szSubject As String, szBody As String, szFile As String
Dim flBody
Dim i As Long
Dim fs, a As Object
Dim oMsg As New CDO.Message
Dim szCC As String, szBCC As String
On Error GoTo Err_Handler
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(Worksheets("設定").Cells(27, 1).Value, True) 'ログファイル
passwd = ""
oMsg.Configuration.Fields.Item(cdoSendUsingMethod) = cdoSendUsingPort '2
oMsg.Configuration.Fields.Item(cdoSMTPServer) = Worksheets("設定").Cells(11, 1).Value 'SMTPサーバー名
oMsg.Configuration.Fields.Item(cdoSMTPServerPort) = Worksheets("設定").Cells(13, 1).Value 'ポート番号
oMsg.Configuration.Fields.Item(cdoSMTPConnectionTimeout) = 60 'タイムアウト値
If Worksheets("設定").Cells(7, 1).Value <> "" Then 'CC
oMsg.CC = Worksheets("設定").Cells(7, 1).Value
End If
If Worksheets("設定").Cells(9, 1).Value <> "" Then 'BCC
oMsg.BCC = Worksheets("設定").Cells(9, 1).Value
End If
oMsg.Configuration.Fields.Item(cdoSMTPAuthenticate) = Worksheets("設定").Cells(15, 1).Value 'SMTP認証
'要パスワード認証の場合
If Worksheets("設定").Cells(17, 1) = 1 Then
UserForm1.Show
If sw = 1 Then
oMsg.Configuration.Fields.Item(cdoSendPassword) = passwd
Else
MsgBox "送信処理をキャンセルしました。"
GoTo Exit_sub
End If
End If
If Worksheets("設定").Cells(21, 1) = 1 Then
oMsg.Configuration.Fields.Item(cdoSMTPUseSSL) = True 'SSL暗号化
Else
oMsg.Configuration.Fields.Item(cdoSMTPUseSSL) = False 'SSL暗号化しない
End If
oMsg.Configuration.Fields.Item(cdoLanguageCode) = Worksheets("設定").Cells(23, 1).Value '文字コード
oMsg.Configuration.Fields.Update
' メール送信結果を記録するファイル名を指定します。
szServer = Worksheets("設定").Cells(11, 1) ' SMTPサーバ名
'
With Worksheets("宛名及び置換文字")
If .Cells(1, 3) & .Cells(1, 7) = "" Then
MsgBox "タイトルとFROMを入力してください"
GoTo Exit_sub
Else
If MsgBox("タイトル:" & .Cells(1, 3) & vbCrLf & "送信元:" & .Cells(1, 7) & vbCrLf & vbCrLf & "上記でよろしいですか?", _
vbOKCancel, "確認") = vbCancel Then
GoTo Exit_sub
End If
End If
szSubject = .Cells(1, 3) ' 件名
szFrom = .Cells(1, 7) ' 送信元
If .Cells(1, 10) = "高" Then
oMsg.Fields("urn:schemas:mailheader:Importance") = "High"
oMsg.Fields("urn:schemas:mailheader:Priority") = 1
oMsg.Fields("urn:schemas:mailheader:X-Priority") = 1
oMsg.Fields("urn:schemas:mailheader:X-MsMail-Priority") = "High"
oMsg.Fields.Update
End If
If Worksheets("設定").Cells(19, 1).Value = "" Then
oMsg.Configuration.Fields.Item(cdoSendUserName) = Cells(1, 7).Value 'メールアドレス
Else
oMsg.Configuration.Fields.Item(cdoSendUserName) = Worksheets("設定").Cells(19, 1).Value 'ログインID
End If
oMsg.Configuration.Fields.Update
oMsg.From = szFrom
oMsg.Subject = szSubject
i = 3
Do While .Cells(i, 1) <> "END"
If .Cells(i, 1) = "○" Then
szTo = .Cells(i, 5) ' 宛先
szBody = .Cells(i, 6) ' 本文
If Worksheets("設定").Cells(25, 1).Value = 1 Then '改行コードCRLF
szBody = Replace(szBody, vbLf, vbCrLf)
End If
szFile = .Cells(i, 11) '添付ファイル
oMsg.To = szTo
oMsg.TextBody = szBody
If szFile <> "" Then
oMsg.AddAttachment szFile
End If
On Error GoTo ErrHandler1
oMsg.Send
.Cells(i, 1) = "完了"
cont1:
End If
i = i + 1
Loop
End With
' パラメータエラーのときは、戻り値にエラーメッセージが返ります。
MsgBox "終了しました"
GoTo Exit_sub
ErrHandler1:
MsgBox "エラー:" & Err.Number & vbCrLf & Err.Description
a.WriteLine (Date & " " & Time & " " & Err.Number & "-" & szTo & "-" & Err.Description)
Worksheets("宛名及び置換文字").Cells(i, 1) = "エラー"
Resume cont1
Err_Handler:
MsgBox Err.Description, vbCritical, "Error"
GoTo Exit_sub
Exit_sub:
a.Close
End Sub
2014年4月7日月曜日
今更ながら磁気カードについて考える
今はRFID・ICカードが普及して、今更磁気カードなんて使わないでしょ!?
そう思われる。
磁気カードはスキミングにより、サクサク読み取れます。
カードのコピーは多少の技術的知識があれば、お茶の子さいさい、への河童。なわけです。
セキュリティーの面からもICカードを利用するのが望ましい事は誰でも納得出来るところです。
しかし、磁気カードはまだまだ使われている。
理由は、「カードの単価が安い」という事に尽きる。
無料でカードを顧客に配布する様なカードソリューションにとっては、重要な要件になる。
ICカードはMifare Ultra rightはもっとも安いICカードだが、それでも磁気カードの方が安い。
したがって、磁気カードは市場から無くならない。
そう思われる。
磁気カードはスキミングにより、サクサク読み取れます。
カードのコピーは多少の技術的知識があれば、お茶の子さいさい、への河童。なわけです。
セキュリティーの面からもICカードを利用するのが望ましい事は誰でも納得出来るところです。
しかし、磁気カードはまだまだ使われている。
理由は、「カードの単価が安い」という事に尽きる。
無料でカードを顧客に配布する様なカードソリューションにとっては、重要な要件になる。
ICカードはMifare Ultra rightはもっとも安いICカードだが、それでも磁気カードの方が安い。
したがって、磁気カードは市場から無くならない。
VB.NETからExcel2007のソート機能を使う
VB.NETからExcel2007のソート機能を使う
ソートキーが文字列の場合、順番を指定してソートしてあげないと、希望通りのソートができないですよね。
VB.NETから簡単にエクセルのソート順を文字列していして実行する方法を見つけたので書いておきます。
VBレスキュー(花ちゃん)のサンプル投稿用掲示板
を参考にしてみたものの、いまひとつピンとこない。
半日悩んだ結果、こんなに簡単なコードで、出来る事がわかりました。
「CustomOrder」を使います。
以下にサンプルコードを書いておきます。
既にエクセルオブジェクトが読み込まれていて、アクティブシートが選択されている状態であることを前提にしています。
「strソート文字列」はソートする文字列群がすでに代入された、StringのArrayListとします。
「CustomOrder」はシート毎に設定すると考えられます。
シートを選択してSort.SortFieldsに設定してあげたらできました。
登録:
投稿 (Atom)