Nullセーフ演算子?->を提案
2024.04.21
おはようございます、PHP8からNullセーフ演算子というものが仲間に加わりました.Laravelでいうoptionalと同じ挙動になります.Laravelのoptionalを知らない方に説明をGeminiにしてもらいます.
$country = $object?->user?->getRule();
Nullセーフ演算子とは
・Nullセーフ演算子 ?-> を使用すると、オブジェクトがnullかどうかを事前にチェックすることなく、プロパティやメソッドにアクセスできます.・Nullセーフ演算子は、プロパティやメソッドだけでなく、配列や関数の呼び出しにも使用できる.
gemini
ということになり、とても便利な演算子です.使う機会はプログラムしていると結構あるので使用してみてはどうでしょうか?
明日へ続く.
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
country, gemini, getRule, gt, gt;user, Laravel, null, Nullセーフ演算子, object, optional, オブジェクト, プロパティ, メソッド, 事前, 仲間, 挙動, 演算子, 配列, 関数,
何かの役に立つ#bluesky
2024.01.29
おはようございます、QiitaにblueSkyのプロフィールURLからRSSを抽出するコードを書きました。先日、blueSkyにRSS機能を追加したという記事を読んだので、その日のうちに対応した形になります。
特に難しいコードでもないので、コメントは一切書いていませんが、それなりに役に立つと信じてリリースしました、ソースの改修などを行って頂けて構いませんが出来ればQiitaもしくはこちらの記事にリンクを貼っていただけたら幸いです。
PHP環境は8.2になっていますが、PHP7系でも動くソースコードなので安心してご使用いただけるかと思います。使用にあたって最終行はコメントアウトを行ってください、url変数も自分にあったurlに変えていただければと思います。
<?php
class blueSkyRss{
public $rss = null;
/**
* __construct
* @param $url
* @return void
*/
public function __construct($url)
{
try {
$html = file_get_contents($url);
preg_match('/https:\/\/bsky\.app\/profile\/did.*\/rss/',$html,$matches);
if($rssUrl = $matches[0]){
$feed = simplexml_load_file($rssUrl);
$this->rss = $feed;
}
} catch (\Throwable $th) {
//throw $th;
}
}
/**
* getRss
* @return object
*/
public function getRss():object
{
$response = [];
if(isset($this->rss->channel)){
$cnt = 0;
foreach($this->rss->channel->item as $item){
$response[$cnt]['link'] = $item->link;
$response[$cnt]['comment'] = $item->description;
$response[$cnt]['date'] = $item->pubDate;
$cnt++;
}
}
return (object)$response;
}
}
$url = 'https://bsky.app/profile/xxxxxxx.bsky.social';
//var_dump((new blueSkyRss($url))->getRss());
明日へ続く。
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
bluesky, catch, cnt, construct, description, did, foreach, getRss, isset, lt, object, PARAM, preg_match, pubDate, qiita, return, RSS, throw, Throwable, try,
goo-labのひらがな化API雛形を作りました。
2021.05.17
goo-labのひらがな化API雛形を作りましたので、お裾分けです。YOUTUBEで解説している事を抜粋して記載します、まずAPIとはアプリケーションプログラミングインターフェイスの略です。APIを簡単に解説するとAというデータを送るとAのデータを処理して何らかの結果を返却してくれるサービスを言います。
今回のひらがな化APIは漢字の文字をひらがな(カタカナ)に変換して返却してくれるサービスです。自分が作った部分はひらがな化APIのサーバにデータを送信して返却データをキャッチする部分になります。APIというのはどんなAPIも同じようなものですので、一度、理屈を分かってしまうと簡単なものです。
因みにディファインの部分を自分のAPIに変更してお使いください、尚、コマンドラインから実行するように設計しています。
<?php
define("APIKEY","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
class Hieagana{
public function main($str="漢字が混ざっている文章"){
if(!$str){return false;}
$headers = array(
"Content-Type: application/x-www-form-urlencoded",
);
// app_id(必須項目) アプリケーションID
// request_id リクエストID
// 省略時は"labs.goo.ne.jp[タブ文字]リクエスト受付時刻[タブ文字]連番"となります。
// sentence(必須項目) 解析対象テキスト
// output_type (必須項目) 出力種別
// hiragana(ひらがな化)、katakana(カタカナ化)のどちらかを指定してください。
$params = [
"app_id"=>APIKEY,
"sentence"=>$str,
"output_type"=>"hiragana"
];
$curl = curl_init("https://labs.goo.ne.jp/api/hiragana");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
$output = (object)json_decode(curl_exec($curl));
curl_close($curl);
var_dump($output);
}
}
if($argv[0]){
(new Hieagana)->main($argv[1]);
}
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
$params, APIKEY, application, argv, array, decode, false, goo.ne.jp, headers, hiragana, katakana, labs, lt, object, php define, quot, VERIFYHOST, youtube, アプリケーションプログラミングインターフェイス, コマンドライン,
鳴子を機械学習で認識させる事が出来たよ!
2020.09.02
高知県なのでよさこい、よさこいと言えば鳴子を持って踊るがルール。
鳴子を持っているかを判断する機械学習を作ってみようという事で今回の考えが思いつき、早朝から機械学習で鳴子認識させる事に取り組んでみました。
難易度はかなり低いのでそこらへんのITエンジニアなら出来ると思います、出来なければITエンジニアなのかな?と思ってしまうぐらいの難易度かと思います。
大変だったことは教師あり学習なので認識させるのが面倒だった。
鳴子の写真を30枚ぐらい機械学習で認識させました、、、。
今回、使用した機械学習のライブラリはDlib(ディーリブ)というものです、
ググるとインストール方法からプログラム方法まで参考サイトが結構あります。
自分のサイトでは機械学習させた後、静止画を認識させるコードを掲載しときます。
import cv2
import dlib
detector = dlib.simple_object_detector("yosakoi.svm")
image = cv2.imread("yosakoi.jpg.webp")
naruko =detector(image)
for f in naruko:
print("left, top, Right, bottom : ", f.left(), f.top(), f.right(), f.bottom())
cv2.rectangle(image, (f.left(), f.top()), (f.right(), f.bottom()), (255,0,0), 2)
print("{} naruko".format(len(naruko)))
photo = dlib.image_window()
photo.set_image(image)
photo.add_overlay(naruko)
cv2.imwrite("yosakoi-naruko.jpg.webp",image)
因みに動画も認識させてみようと思ったのですが、こちらは上手く認識できなかったです・・・。
鳴子の機械学習モデルを置いときますのでご自由に使用ください。
学習したモデルを読み込んで上記のソースコードで試してみてください、尚、リナックス環境で動作します!!?
鳴子機械学習モデル?ダウンロード?
https://zip358.com/ML/YOSAKOI/yosakoi_Model.zip
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
2, 30, cv, detector, Dlib, import, IT, object, qu, simple, インストール, エンジニア, かなり, コード, こと, サイト, そこら, ティー, プログラム, べん, もの, よさこい, ライブラリ, リブ, ルール, 事, 今回, 使用, 写真, 判断, 参考, 大変, 学習, 後, 掲載, 教師, 方法, 早朝, 機械, 自分, 認識, 難易, 静止画, 面倒, 高知県, 鳴子,
あるキーワードをライクするTwitter API。
2019.11.06
さくらレンタルサーバー、もともとmecab(メカブ)が入っているらしい。
自動であるキーワードに対してライクする方法(Twitter API)です。
たぶん、こんなコードはなかったと思います、
過去記事「ワードプレス過去記事のツイートをボット化する方法。」と併用してお使いください。
そうでないと動きませんので…。
知り合いエンジニアさんとかに組み込んでもらってください。
<?php
function mecab_tw_like($txt="",$connection=Null){
if(!$txt)return false;
if(!is_object($connection))return false;
$cmd = "echo "$txt" | mecab";
exec($cmd, $opt, $return_ver);
//var_dump($opt);
foreach($opt as $key=>$val){
$r = explode("t",$val);
if(preg_match("/名詞/",$r[1])){
$statuses = $connection->get(
'search/tweets',
array(
'q' => $r[0],
'count' => '3',
'lang' => 'ja',
'locale' => 'ja',
'result_type' => 'recent',
'include_entities' => 'false'
)
);
if(is_array($statuses->statuses) and $statuses->statuses){
foreach( $statuses->statuses as $tweet ){
$id = $tweet->id;
$result = $connection->post(
'favorites/create',
array(
'id' => $id
)
);
}
}
}
}
}
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
API, cmd, connection, echo, exec, false, function, if, is, like, lt, Mecab, null, object, opt, php, quot, return, tw, Twitter, txt, ver, エンジニア, キーワード, コード, サーバー, さくら, ツイート, プレス, ボット, メカブ, ライク, レンタル, ワード, 併用, 方法, 自動, 記事, 過去,
google NewsをRSSで取得してjsonで返却するPHPプログラム
2018.12.22
<?php
//$_POST["sh"]...検索キーワード
if ($_POST["sh"]) {
$sh = urlencode(@xss_defence($_POST["sh"]));
$res = simplexml_load_file("https://news.google.com/news/rss/headlines/section/q/$sh/?ned=jp&hl=ja&gl=JP");
rss($res);
}
function rss(object $obj = null):void
{
if (isset($obj->channel->item)) {
if ($obj->channel->item) {
$cnt = 0;
foreach ($obj->channel->item as $item) {
$result[$cnt]["title"] = (string)$item->title;
$result[$cnt]["link"] = (string)$item->link;
$result[$cnt]["pubDate"] = (string)$item->pubDate;
$result[$cnt]["description"] = (string)$item->description;
$result[$cnt]["source"] = (string)$item->source;
$cnt++;
}
}
}
echo json_encode($result);
}
function xss_defence(mixed $val):mixed
{
if(!isset($val))return false;
if(is_array($val)){
foreach ($val as $key => $value) {
# code...
$val[$key] = strip_tags($value);
$val[$key] = htmlentities($val[$key],ENT_QUOTES);
}
}else{
$val = strip_tags($val);
$val = htmlentities($val,ENT_QUOTES);
}
return $val;
}
google NewsをRSSで取得してjsonで返却するPHPプログラムです。
ご自由にご使用ください。
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
0, channel-, cnt, com, defence, file, foreach, function, gl, Google, gt, headlines, hl, https, if, isset, item, ja, jp, json, load, lt, ned, News, null, obj, object, php, POST, quot, res, RSS, section, sh, simplexml, urlencode, void, xss, キーワード, プログラム, 取得, 検索, 返却,
PHP 型の変換 – javaぽっい書き方で型キャストが出来ちゃう(`・ω・´)
2016.02.21
PHP 型の変換 – javaぽっい書き方で型キャストが出来ちゃう(`・ω・´)
こういう書き方なんか、カッコイイななんて的な書き方で
尚且つ、覚えやすい。int型やstring型などに変換する
関数もあるのですが、こちらの書き方を覚えておいたほうが
楽かなと自分は思っています。
PHPで開発する人達は
こちらを使っている人のほうが多そうな
気がします。多言語にまたがって開発する場合は
こちらの方がわかりやすいのかなとも
感じます。いろいろと言語をまたがると
書き方や構文に悩まされたりします。
完璧に覚えている方なら
全然だと思いますが、自分みたいな
軽く覚えているタイプは多言語にまたがると
構文ミスなどで時間をロスしてしまいます。
型キャスト例
<?php //bool,unset,array,object等など 型キャスト可能。 $re = (int)$hoge; $re2 = (string)$hoge; ?>
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
$re2, 1, AM, bool, hoge, int, javaぽっい書き方, object, PHPプログラミング教室, string, unset, キャスト, キャスト例, 変換, 多言語, 楽かなと自分, 構文, 構文ミス, 短期集中講座, 関数,