カテゴリー : プログラミング/page-1

SOY CMSマニュアルページ作成中
SOY CMS、SOY ShopとSOY Appの操作に関する質問を下記のページで受け付けています。

SOY CMS/Shopで標準機能だけでは実装が難しい時はお気軽にご相談下さい。

SOY CMSの開発秘話を投稿しました。→ SOY CMSの開発秘話
ブログ内検索
 

Go言語 + Selenium + Agoutiで自動でGoogle検索

前回の続きで、seleniumでグーグル検索した後、検索フォームにseleniumuと入力してボタンを押してみる。 下記のコードを入力する。 package main import ( "log" "github.com/sclevine/agouti" ) func main() { driver := agouti.ChromeDriver() err := driver.Start() if err != nil { log.Fatal(er...

Read More…

 

Go言語 + Selenium + Agoutiでブラウザ操作の自動化

Selenium - Web Browser Automation https://agouti.org/ Go言語でSeleniumとAgoutiを介してChromeブラウザを自動で操作してみる。 SeleniumはJava上でなければ動作しないため、はじめにJavaをインストールする。 Javaは下記のページからダウンロードして、画面の指示に従ってインストールする。 無料Javaソフトウェアをダウンロード 続いて、seleniumu-serverをhttps:...

Read More…

 

SOY CMSを介さずにSOY2DAOを使ってみる2

前回のSOY CMSを介さずにSOY2DAOを使ってみる1では、 SOY2DAOクラスを読み込んでみたけれども、 SOY2DAOを介してDAOではなく自作したSQL構文を実行してみた。 今回はDAOを実行するサンプルコードを作成してみる。 SOY2DAOでデータベースから値を取り出す はじめにDAOを実行するためのクラスを用意する。 DAO用のクラスは下記の個所に作成してみる。 . ├── index.php └── webapp ├── cache ...

Read More…

 

SOY CMSを介さずにSOY2DAOを使ってみる1

SOY2HTMLのIgnoreプラグインを使ってみるに引き続き、 SOY CMS以外のアプリでSOY2DAOを使ってみる。 SOY2DAOはその名の通りDAOのためのクラスですが、 SQL構文をそのまま実行出来るという痒いところに手が届く的な側面もあるため、 PDOよりも直感的にSQLを実行出来るといった機能もある。 SOY2DAOに関する詳細は下記の記事をご覧ください。 SOY CMS/Shopのモジュール内でSQLを実行する SOY2DAOでデータベースから値を取り出す...

Read More…

 

Go言語でスコープ

下記のようなコードを入力してみる。 package main import "fmt" func main() { var str string var i int // if文を使うためのダミーの変数 if i == 0 { var str string str = "hello" fmt.Println(str) } fmt.Println(str) } 実行すると、helloと表示される。 ここで、注目したいのは、func ma...

Read More…

 

SOY2HTMLのIgnoreプラグインを使ってみる

前回のSOY CMSを介さずにSOY2HTMLを使ってみるでSOY CMSに組み込まれているSOY2の機能をSOY CMSを介さずに利用できることを紹介しました。 SOY2HTMLという言うのは!-- soy:id="***" /--のことで、 このタグこそがSOY CMSの開発理念にあるデザイナとプログラマをつなぐ肝となる。 SOY CMSの開発秘話前編 SOY2HTMLを使用出来るようになったら、 一緒に利用したいものとして!-- cms:ignore --があるだろう。 ...

Read More…

 

SOY CMSを介さずにSOY2HTMLを使ってみる

Webサイトなりアプリを開発する際、 SOY CMSは入れたくはないけれども、SOY CMSの記法のsoy:idは使いたい という要望がちょくちょくある。 SOY CMSはSOY2というライブラリを使用していて、 SOY2の中のSOY2HTMLのみを使用することは可能です。 ※SOY2HTMLはテンプレートエンジン 今回はSOY2HTMLのみを利用する方法を説明します。 説明の前にSOY2HTMLについて興味がある方は下記の記事をご覧ください。 SOY CMSの開発秘話前...

Read More…

 

kintoneのカレンダーの日付カラムで4件以上表示したい

kintoneを利用している方から標準機能のカレンダーを印刷して スケジュールの確認用として社内の掲示板に張りたいということで kintone - サイボウズのビジネスアプリ作成プラットフォーム 新しいアプリを作成して、カレンダーページを設けました。 ここで一つ問題発生。 同じ日にスケジュールが4件以上あると、3件目以降のスケジュールが折りたたまれて、 印刷をしても表示されなくなる。 これだと冒頭の要件を満たさないということで、 JavaScrip...

Read More…

 

Go言語でクライアントのレスポンスを見る

workspace/go/web/clientでclient.goファイルを作成する。 package main import ( "fmt" "log" "net/http" "net/http/httputil" ) func main() { resp, err := http.Get("http://localhost:8889") defer resp.Body.Close() if err != nil { log.Fatal(err...

Read More…

 

Go言語でサーバを立ち上げる

workspace/go/web下にserverディレクトリを作成する。 package main import ( "fmt" "io" "log" "net/http" "net/http/httputil" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { dump, err := httputil.DumpRequest(...

Read More…

 

Go言語で並行処理(ゴルーチン)

helloという言葉とworldという言葉をprint関数を作成して、同時に表示してみる。 package main import ( "fmt" "time" ) func main() { print("hello") print("world") } func print(s string) { for i := 0; i 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Print...

Read More…

 

Go言語で無名関数

関数内で作成された関数で、関数名を持たないものを無名関数と呼ぶ。 package main import "fmt" func main() { f := func() { fmt.Println("hello") } f() } f := func() { fmt.Println("hello")で実行したい関数をそのまま変数fに代入する。f()で変数fに入った関数を実行する意味になる。 即時実行の際は、下記のようにコードを入力する。 package...

Read More…

 

Go言語で関数型の値を扱う

helloを表示するgreet関数を変数fに代入して実行してみる。 package main import "fmt" func main() { var f func() f = greet f() } func greet() { fmt.Println("hello") } ここで、f = greetは、関数greetを値として変数に代入している。この場合、f()で、変数fの値が関数型だったら実行される。 fmt.Printlnすると、hel...

Read More…

 

Go言語で内部コマンドを作成する③

~/workspase/go/flagを作業ディレクトリとし、main.goファイルを作成し、その中に下記のコードを入力する。 package main import ( "flag" "fmt" ) var IntOpt = flag.Int("i", 1111, "please input interger value") var StrOpt = flag.String("s", "default", "please input string value") ...

Read More…

 

Go言語で内部コマンドを作成する②

~/workspase/go/cmdを作業ディレクトリとし、main.goファイルを作成し、その中に下記のコードを入力する。 今回は、os.Argsの機能を調べてみる。 package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) if len(os.Args) 1 { fmt.Println(os.Args[1]) } } 次に下記のコマンドを入力する。 cd ~/...

Read More…

 

Go言語で内部コマンドを作成する①

 ~/workspace/go/cmdを作業ディレクトリとして、main.goファイルを作成し、下記のコードを入力する。 package main import ( "fmt" ) func main() { fmt.Println("usako") } 次に、インストールしたMINGW64を使って、下記のような実行ファイルを作成する。 $ cd ~/workspace/go/cmd $ go build main.go $ ./main.exe ...

Read More…

 

Go言語で一方向ハッシュ関数

ryokoという言葉を一方向ハッシュ関数を自作して暗号化してみる。 package main import ( "fmt" ) func main() { hash := CreatHash("ryoko") fmt.Println(hash) } func CreatHash(p string) string { b := []byte(p) fmt.Println(p) fmt.Println(b) return "" } func...

Read More…

 

kintoneで指定の個所だけ印刷範囲にしてみる

最近、サイボウズのWebサービスのkintoneについて色々と調べている。 kintone - サイボウズのビジネスアプリ作成プラットフォーム kintoneというものを軽く触れておくと、 公式サイトの説明文をそのまま引用すると 開発の知識がなくても自社の業務に合わせたシステムをかんたんに作成できる、サイボウズのクラウドサービスです。 業務アプリを直感的に作成でき、チーム内で共有して使えます。 使用すること自体は有償ですが、 開発者登録をすると無償で利用できるので...

Read More…

 

Go言語でファイルの読み込み

templateというファイルの読み込みを行う。 package main import ( "fmt" "io/ioutil" "log" "os" ) func main() { file, err := os.Open("template/header.txt") if err != nil { log.Fatal(err) } defer file.Close() fmt.Println(file) var content...

Read More…

 

Go言語でhtmlからの文字の部分的取得

htmlから本文を取得してみる。 package main import ( "bufio" "io" "log" "net/http" "os" "strings" ) func main() { url := "https://saitodev.co/article/%E3%83%A4%E3%83%96%E3%82%AC%E3%83%A9%E3%82%B7%E3%81%AE%E5%9F%B7%E5%BF%B5" resp, err := htt...

Read More…

 

Go言語で文字列操作

Go言語で"pimg src="/site/files8/P9160020.JPG" alt="" //p"の文字列を、pimg src="./files/P9160020.JPG"/p"に置換してみる。 package main import ( "fmt" "regexp" "strings" ) func main() { line := "pimg src=\"/site/files8/P9160020.JPG\" alt=\"\" //p" ...

Read More…

 

Go言語で特定のサイトの複数の画像を取得する

植物のミカタの任意のページから複数の画像を取得してみる。 func main() { url := "https://saitodev.co/article/%E6%AF%94%E5%8F%A1%E5%B1%B1%E3%81%AE%E5%B1%B1%E9%A0%82%E4%BB%98%E8%BF%91%E3%81%AB%E3%81%82%E3%81%A3%E3%81%9F%E5%A4%A7%E3%81%8D%E3%81%AA%E5%B2%A9" response, err := h...

Read More…

 

複合機とGoogleドライブを連携して、出先でFAXの内容を確認する

最近の複合機はFAXを受信した時にGoogleドライブにPDFファイルとして共有する機能があるらしい。 この機能があれば出先であってもスマホ等があれば出先でもPDFを確認できるようになるため、 帰社するまでFAXの内容を確認できないとか、 社内にいる人がFAXの内容をスキャンしてメールで送信という手間が省ける上、 営業FAX等の受信で無駄に紙を使用するということもなくなる。 ただし、この機能はGoogleドライブで共有だけで、 FAXを受信したことをリアルタイムで把握したいので、...

Read More…

 

Go言語でHTMLのイメージタグから画像を取得

画像の名前がついたファイルをそのまま作成する。 package main import ( "fmt" "io/ioutil" "log" "net/http" "os" "regexp" "strings" ) func main() { var line string line = "pimg src=\"/site/files10/P5100314.JPG\" alt=\"\" //p" r := regexp.MustCompile...

Read More…

 

Go言語でWebサイトから画像のデータを取得

植物のミカタから任意の画像データを取得し、main.goと同階層に画像ファイルを作成してみる。 package main import ( "io/ioutil" "log" "net/http" "os" ) func main() { var url string url = "https://saitodev.co/site/files10/P5080305.jpg" response, err := http.Get(url) if e...

Read More…

 

Go言語でファイル作成

main.goファイルと同階層に「hello」と記載されたsample.txtファイルを作ってみる。 package main import ( "log" "os" ) func main() { var file *os.File _, err := os.Stat("sample.txt") if err != nil { file, err = os.Create("sample.txt") if err != nil { log....

Read More…

 

Go言語で構造体のメソッド

Go言語では、任意の型に特化した関数を定義するための仕組みであるメソッドという機能がある。 Person型の構造体を含んだ関数Greetをパッケージに組み込んでmain.goファイルで実行してみる。 まず、sample.goファイルに下記のコードを記載する。 package sample import "fmt" type Person struct { Id int Name string Reading string } func (p ...

Read More…

 

Go言語で構造体

Go言語の型は、typeで自由に作ることができる。今回は、「複数の任意の型の値を一つにまとめたもの」である構造体(struct)という型を作成する。 例えばryokoという人を番号とふりがなをつけて表示してみる。 package main import "fmt" type Person struct { id int name string reading string } func main() { var ryoko Person ...

Read More…

 

Go言語でマップ(連想配列)

任意の型のキーと任意の型の要素を保持する特殊な配列をマップと呼ぶ。他言語では連想配列と呼ぶ。 キーが「name」、要素が「Tuyoshi」,キーが「reading」を要素が「Saito」の組み合わせを表示してみる。 package main import "fmt" func main() { var m map[string]string m = make(map[string]string) m["name"] = "Tuyoshi" m["reading"]...

Read More…

 

Go言語でスライス(可変長配列)

Go言語のmake関数を使って、10までの要素を作り、4番目の数「5」を表示してみる。 package main import "fmt" func main() { var s []int s = make([]int, 10) s[4] = 5 fmt.Println(s) } 要素の数を特定しないで記載する配列を可変長配列と呼ぶ。前回の固定長配列は、var s intで表したが、可変長配列は、var s []intと[]を引数の前に記載する。また、...

Read More…

 

妻にプログラミングを教えることにした-続き

よくこんな話を聞く。 プログラマと話す時、細かいところまで確認されて話にくいと。 伝える側はおそらくは電話でさくっと伝えて終わらせたいのだろうけれども、 段階を踏まれて事細かく且つ理屈っぽく話をされるからだろう。 更には電話による口頭のやりとりを拒否されて、 メールでやりとりをしてほしいと言われることもあるだろう。 上記の問題に対して、私なりの経験をまとめておくことにしよう。 それが前から記載している妻へプログラミングを教えている理由に繋がってくるから。 妻にプログラ...

Read More…

 

チャットワークとGoogle Apps Scriptで音声入力で投稿してみる

Google AppsのGoogleドキュメントでは音声入力という機能がある。 Googleドキュメントで画像ファイルから文字列を抜き取ってみる Google ドキュメント - オンラインでドキュメントを作成、編集できる無料サービス 前回紹介したGoogle Apps Scriptでチャットワークに投稿するライブラリと組み合わせて、 音声入力でチャットワークに投稿するコードを書いてみる。 Google Apps Scriptからチャットワークに投稿してみる 音声入力のルールと...

Read More…

 

Go言語で繰り返し

Go言語のforを使って繰り返す変数iを表してみる。 package main import "fmt" var i int func main() { for i = 0; i 10; i++ { fmt.Println(i) } } for i = 0; i 10; i++では、iは0から始まって、10より下の数値であれば繰り返し実行する。実行した後にiに+1をして次の繰り返し実行を行う。 forは、, 0; i 10; i++のように、;で区切...

Read More…

 

Go言語でHTTPのPOST

クライアントがサーバにデータを送ることをHTTPのPOSTと呼ぶ。 今回はチャットワークのマイチャットに「GOからのテスト投稿」という文字列を送ってみる。 チャットワークに投稿するための事前準備として、チャットワークAPI鍵とroomIDを調べておく必要がある。 調べ方は下記の記事を参考にした。 PHPでチャットワークAPIを介してメッセージを投稿してみる func main() { room_id := "36286956" url := "https://api.cha...

Read More…

 

Google Apps Scriptからチャットワークに投稿してみる

チャットワーク(ChatWork) | ビジネスが加速するクラウド会議室 PHPでチャットワークAPIを介してメッセージを投稿してみるでPHPからチャットワークに投稿する内容を記載した。 が! おそらく普段の業務ではPHPでコードをゴリゴリ書くよりも、 Google Apps Script(以後、GAS)で書いた方が様々なWebアプリを簡単に利用できるGoogle Appsの恩恵を預かれるため有効だろう。 社会人・学生向けプログラミング教室でGASで業務改善の勉強会を行いました...

Read More…

 

Go言語でHTTPのGET

インターネットでは、クライアントとサーバというものがあり、クライアントがサーバに命令を送って、サーバがその結果を返すということをしている。 命令を送ることをリクエストと呼ぶ。今回はウェブサイトを表示するHTTPに焦点を絞って記載する。HTTPリクエストにはGETとPOSTというものがある。 今回は、HTTPのGETを使ってみる。 例えば、「植物のミカタ」というサイトのトップページにアクセスしたい場合は、一番簡単な方法はhttpが使えるClomeなどのアプリケーションのアドレスバーにhttp...

Read More…

 

Go言語でユニットテスト

自分が作った関数が正しく動くか調べるのにテストコードというものがある。 以前、整数が偶数ならtrue、奇数ならfalseを返すJudgeEo関数を作ったが、それをテストしてみる。 まず、以前コードを記載したryoko/func.goファイルと同じ階層に新規ファイルを作成する。 ここでは名前をryoko/func_test.goと名付ける。func_test.goに下記のコードを入力して実行する。 package ryoko import "testing" func Test...

Read More…

 

Go言語で制御構文のif文

if文は正しいか正しくないかという判定によく使う制御構文である。 例えば、変数iが5ならば、「iに格納されている文字は5」と表示してみる。 package main import "fmt" func main() { var i int i = 5 if i == 5 { fmt.Println("iに格納されている文字は5") } } if i == 5でiという値が、5であればを意味し、5であれば{}の中身を実行するという意味になる。 ※...

Read More…

 

PHPでチャットワークAPIを介してメッセージを投稿してみる

妻にプログラミングを教えることにした-前編でも記載したけれども、 最近、仕事上での電話問題の解決のために様々な試みをしている。 そのうちの一つとして、 SlackやChatWorkといった拡張性の高いチャットツールを利用することを視野に入れている。 ※LINEやFacebookにあるグループ機能での仕事のやりとりからの脱却が重要 SlackとChatWorkの両方を検討してみたけれども、 日本の中小企業の方であれば、 チャットワーク(ChatWork) | ビジ...

Read More…

 

Go言語でpackage

関数をまとめておく機能としてpackageがある。 packageすると、main関数に記載するコード行が小さくなり、コードが読みやすくなるという利点がある上にpackageは再利用できるし、配布もできる。 まずgoフォルダに合わせて右クイックで新規フォルダを作り、名前をつける(今回はryoko。これがpackage名になる)。 次にryokoフォルダに下記のような新規ファイルを作る。 ※ryokoフォルダの中のファイルにしたい場合は、ファイル名の前に必ずryoko/を入れる...

Read More…

 

Go言語で関数

「good morning」を表示するというaisatuという関数を作ってみる。 関数とは、func 関数名(){}で作成する一連の処理をまとめたものである。 package main func main() { aisatu() } func aisatu() { print("good morning") } main関数の中で、自作したaisatuという関数を実行することになる。main関数はエントリーポイントと呼ぶ。関数の呼び出しには必ず()をつける...

Read More…

 

Go言語で変数

変数を使ってみる。ここでは変数に5を代入して表示してみる。 package main func main() { var suji int suji = 5 print(suji) } varは変数をつくる前に入力するコード、sujiは値が入る箱のようなものにつける名前、intは整数を意味する。 なので、sujiの部分には、いろんな数字を入れることができる。 ここでは変数数字に5を代入して、printで出力する(実行は、ctrl+alt+b)。 すると、5と表示...

Read More…

 

php-webdriverでセレクトボックスの値を選択する2

select name="Customer[area]" id="" class="input-pref" option value=""都道府県名/option option value="1"北海道/option option value="2"青森県/option option value="3"岩手県/option !-- 他の県は省略 -- /select 以前、上記のコードがあった時に php-webdriverでどのように京都府の値を選択するか? と...

Read More…

 

Go言語でHello World

Go言語の環境の準備は下記の記事より WindowsでGo言語 workspace内にgoフォルダ(プログラミングの世界ではディレクトリと呼ぶ)を作る。 Atomを開くと、Enter the path for the new file という文字が表示されるので、そこにmain.goと入力する。 これで、goディレクトリの中に、main.goというファイルが出来上がった。 main.goに下記のコードを記述。 package main func main() { ...

Read More…

 

妻にプログラミングを教えることにした-後編

妻にプログラミングを教えることにした-前編 前回、妻にプログラミングを教えることにした背景を記載した。 プログラミングを体験することによって、人に伝える前に内容を整理する習慣が付いて、 整理するということが結果として様々な人達の業務改善に繋がると信じている。 そして前回記載しなかった内容だけれども、 もう一つ教えたい背景がある。 それは、中学生向けのプログラミング教室で感じたことで、 中学生にプログラミングを教えてみて。その1 教えるということは、 伝える前に対...

Read More…

 

妻にプログラミングを教えることにした-前編

パソコンを使う作業員のイラスト(女性) | かわいいフリー素材集 いらすとや 前々からやりたいことに一つに女性向けのプログラミング教室がある。 何故女性向けに話をしたいかというと、 一時、市場調査を兼ねてハローワークに頻繁に立ち寄っていた時のこと 事務職になりたい人が非常に多くいて、 その割に求人募集がなく、事務職の倍率が3倍を越えていた事を知った。 運良く事務職をやりたい人と出会うことが出来たので、 何故様々な職種があるのに事務職になりたいのですか? と質問すると、...

Read More…

 

php-webdriverでiframe内のリダイレクトに対応する

SOY CMSでは、ラベルブロックの設定あたりでiframeを開いて、 iframe内でリダイレクトしながら設定を進める画面がある。 iframeは以前にTinyMCEのところで操作方法を調べたので、 iframe一ページ分であればなんとかなったけれども、 php-webdriverでTinyMCEに値を挿入する iframe内でリダイレクトがあると、2枚目のページで指定した要素が見つからないというエラーに遭遇する。 なんでだろうと試行錯誤試し...

Read More…

 

php-webdriverで現在開いているページのURLを取得する

php-webdriverで現在開いているページのURLを取得する必要が出てきた。 SOY CMSの管理画面では、 記事やラベルの詳細ページを開くとURLの末尾に各々のIDが付与されているため、 URLから指定の記事、もしくはラベルのIDを取得するためにはURLを取得しなければならない。 SOY CMSで標準ページでも任意のブログページのb_blockを使用できるようにした というわけで、php-webdriverの公式Wikiを調べてみたところ、 WebDriverクラスの...

Read More…

 

php-webdriverでTinyMCEに値を挿入する

php-webdriverでSOY CMSの記事作成画面のテストコードを作成する時に苦戦した。 php-webdriverでconfirmダイアログをクリックする どこで苦戦したか?というと、 記事作成画面の本文に値を入力するところで、 SOY CMSの記事作成画面ではTinyMCEというWYSIWYGエディタを利用していて、 SOY CMSの記事投稿画面でYouTubeの動画の挿入ボタンを追加しました TinyMCE | The Most Advanced WYSI...

Read More…

 

SOY CMSの開発秘話前編

SOY CMSとは何ですか? WordPressとは何が違うのですか? と聞かれたのでまとめてみる。 SOY CMS 公式サイト - 簡単便利で自由自在なオープンソースマーケティングプラットフォーム、無料で公開中[ソイ] 日本語 — WordPress ざっくりと言うと、 SOY CMSはコンテンツマネージメントシステムなので、 自身のサイトを持ったり、ブログページを作成したり、お問い合わせフォームを設置したりと、 機能だけ見たら、WordPressと大差ないどころかむしろ劣...

Read More…