masalibの日記

システム開発、運用と猫の写真ブログです

net::ERR_INCOMPLETE_CHUNKED_ENCODING

というエラーにはまった

このエラーはブラウザ上には表示される consoleログにでるログです

経緯

ファイルをアップするプログラムをつくりました

ドラッグアンドドロップでアップする機能なのですが ファイル合計のバイトが180~200Mを超えたあたりで

net::ERR_INCOMPLETE_CHUNKED_ENCODING

というエラーがでます・・・ 質が悪いのはサーバーのログは200でした

htaccessファイルにHTTP 1.0を強制して問題を解決できました: SetEnv downgrade-1.0 これは問題を取り除く。しかし、HTTP 1.1をHTTP 1.1に強制することは適切な解決策ではありません。 https://codeday.me/jp/qa/20181208/59946.htmlより引用

と書いてあったが自分の環境では成功しなかった

アンチウイルスのリアルタイム保護を無効にすることで成功しました http://thisinterestsme.com/err_incomplete_chunked_encoding/ より引用

アンチウイルスをオフにすることは会社の方針的にできない

どうあがいてもこのエラーが解消されなかったので
ドラッグアンドドロップされたファイル郡を分割して送信するという事をおこなった

単純な同期処理から非同期処理の変更なのではまった

はまった内容

javascriptのエラーがわかりにくい

javascriptのエラーがおきると単純な画像表示されてしまう 必要な部分をとってevent.preventDefault()した

  async function onUpload_Drop(event){  
        var fd = event.dataTransfer.files;//eventに必要な部分だ取得する
        event.preventDefault();//eventの破棄

event.dataTransfer.filesにはsortのメソッドがない

今までは受けた側でソート処理をしていたが、送信前にソートしないといけなかった

だがドラッグアンドドロップしたイベントのfilesは配列なんだけど sortのメソッドがなかった
どうしてないのかわからないので
一旦配列に突っ込んでソートした添字を保存するようにした

var fd = event.dataTransfer.files;
var fdsortdatas = [];
for (var i=0; i< fd.length; i++) {
    //console.log(fd[i].name);
    fdsortdatas.push({"soeji": i, "name": fd[i].name});
}
console.log(fdsortdatas);
fdsortdatas.sort(function(a,b){
    if(a.name<b.name) return -1;
    if(a.name > name) return 1;
    return 0;
});
console.log(fdsortdatas);

ローディングの画像が表示されない

自分でも悲しいがファイルアップ中にローディングの gifを出すのが全然できなくてawait をいれて無理やり表示させた これが正解のかわからない

//↓すぐに反映されない
document.getElementById('uploadform').style.display="none";
document.getElementById('loading').style.display="block";
//0.5秒待つ(style反映のため)
const a = await timewaitResolve(1);

//style反映のためにsetTimeoutで待つ
function timewaitResolve(value) {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(value);
        }, 500);
    })
}

感想

非同期処理に作り変えはめんどくさい。 同期処理の方が作りは楽だね・・・処理時間は非同期処理なんだけど・・・

はてなブログ:トップページの一覧で本文のみを非表示にする方法

自分用のメモで、うまくいったが読み込み途中に表示されてしまう
という問題が解決できなかった。気が向いた時に再チャレンジしたい

質問内容

はてなブログproにして記事を一覧表示にしました。 その一覧表示には本文が長々と表示されているので、本文のみを非表示にする方法はありませんか? レスポンシブデザインでやれる方法あればお願いします。 できれば続きを読む無しでやってみたいです

q.hatena.ne.jp

対応方針

ページの読み込みが完了したタイミングでjavascriptでeventを拾い
記事がかいてあるdivタグのclass(entry-content)に対して
display:noneやdisplay:blockにすれば表示、非表示ができます

対応

ヘッダー部分に以下を追記

<script>
window.onload = function() {
      console.log("window_onload");
      if(document.URL == "http://ikou-test-masalib.hatenadiary.jp/") {
        var elements = document.getElementsByClassName('entry-content');
        for(i=0;i<elements.length;i++){
            elements[i].style.display = 'none' ;
        }
      }else{
        var elements = document.getElementsByClassName('entry-content');
        for(i=0;i<elements.length;i++){
            elements[i].style.display = 'block' ;
        }
      }
}
</script>

CSSの部分の一番最後に追記

.entry-content
{
    display:none;
}

結果

読み込み途中だと本文が表示されてしまう・・・(´;ω;`) display以外に何かあるのかな・・・

phpで、長文を「。」区切りでフラッシュ表示させるプログラム

phpで、長文を「。」区切りでフラッシュ表示させるプログラムを… - 人力検索はてな

で適当に作ってみたら
キャンセルされていたことにあとで気がついた・・・

\(^o^)/

gist.github.com

ファイルを読んでから分割しないといけないのがめんどくさい所だった

たまに「人力検索はてな」や「教えてgoo」や「Yahoo知恵袋」を見るのが楽しい

【python3】はてなブログの投稿画像を圧縮する

ブログ画像は重いとSEO的に評価されない
はてなフォトで圧縮した画像をアップしようとしたら更新処理がなかった
Wordpressにあってはてなブログにない機能の1つ

投稿した画像を圧縮する (はてなブログの場合は切り替えになる)

はてなblogAPIとはてなフォトAPIで作ってみました

私のブログは記事が500を超えています
現在の画像から画像を圧縮して新規で
投稿してその画像にブログを更新するなんて無理ゲーです

ループで全ページを回すことも可能だったのですが怖かったので1ページ単位にしています (アクセスが多いページだけやればいいという考えです)

node.jsで作りたかったが非同期処理の沼にハマったので同期処理のpythonに切り替えた (ファイルIO部分)

続きを読む

フォルダ内のファイルを削除(from~toを複数)

単純なfrom~toでも指定できないファイル削除があった・・・
ファイル数が万を超えてかつ数百のフォルダだった
GUIでは無理だった
Windowsなのでvbsで無理やり削除した
二度とやりたくない・・・ (´;ω;`)

Option Explicit

'// INIT
Dim FSO
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")

FindFolder FSO.GetFolder(".")

'// 後処理
Set FSO = Nothing


Sub FindFolder(ByVal objMainFolder)
    Dim objSubFolder
    Dim objFile

    '// フォルダがあれば再帰
    For Each objSubFolder In objMainFolder.SubFolders
        FindFolder objSubFolder
    Next

    For Each objFile In objMainFolder.files

            if (  "2010/02/02 00:00:00" <= objFile.DateLastModified and objFile.DateLastModified <= "2010/12/30 00:00:00" ) Then
                WScript.Echo  "delete:"  & vbTab & objFile.Name & vbTab & objFile.DateLastModified
                objFile.delete 
            End IF
            if (  "2011/02/02 00:00:00" <= objFile.DateLastModified and objFile.DateLastModified <= "2011/12/30 00:00:00" ) Then
                WScript.Echo  "delete:"  & vbTab & objFile.Name & vbTab & objFile.DateLastModified
                objFile.delete 
            End IF
    Next
End Sub

2019/3月のPV報告

作業

  • 33記事を追加 (673→706記事)
  • 広告の最適化が効かなくなって、H2の前に広告を表示するようにした

masalib.hatenablog.com

ampの場合に広告が表示されない問題があったので表示するように変更した 記事単位でしかできないみたい・・・よくわからないけど

ti-tomo-knowledge.hatenablog.com

結果

PV

f:id:masalib:20190331233325j:plain

アクセスは13070でした
どこからも砲をいただかず・・普通の日々でした

2月に比べると下がっている。これはGoogle検索エンジンアルゴリズムのアップデートにより 3割ほど下がっており、次の一手を探さないといけない

masalib.hatenablog.com

2019/04/01 13:14追記
ノイズがあると順位がさがるそうです。

www.web-planners.net

AdSenseアフィリエイト

AdSenseの広告が表示されないということもありほんの少しだけ下がりました

続きを読む

【python3】はてなBlogApiではてなブログを更新

はてなブログapiを公開しており、そちらを使って更新したいと思います。

参考URL

cartman0.hatenablog.com

参考にしたサイトをほぼ丸パクリしています。 違う点は * 関数にしている所 * 更新用の配列を渡している所

仕様

  1. はてなblogに必要なパラメータをセットする
  2. リプレース用の配列を渡す
  3. 更新用の関数を起動する
  4. urlからXMLをダウンロードする
  5. 必要な箇所を更新してXMLを作成する
  6. はてなブログAPIで更新する

ソース

import requests
import bs4



# blogを更新する(一部replaceする)
def update_blog(hatena_id:str , password:str , blog_id:str, entry_id:str,replace_data):
  
    member_uri = "https://blog.hatena.ne.jp/{hatena_id}/{blog_id}/atom/entry/{entry_id}".format(hatena_id=hatena_id, blog_id=blog_id,entry_id=entry_id)

    print(member_uri)
    
    res_member = requests.get(member_uri, auth=(hatena_id, password))
    if not res_member.ok:
        raise Exception("Failed: status_code: " + str(res_member.status_code))
    soup_response_xml = bs4.BeautifulSoup(res_member.content, features="xml")

    # XMLsoupのクローン
    update_soup_xml = bs4.BeautifulSoup(str(soup_response_xml), features="xml")
    # id 削除
    if update_soup_xml.id: update_soup_xml.id.decompose()
    # link 削除
    for l in update_soup_xml.findAll("link"):
        l.decompose()
    # delete published
    if update_soup_xml.published: update_soup_xml.published.decompose()
    # delete app:edited
    edited = update_soup_xml.find("app:edited")
    if edited:
        edited.decompose()
    # delete summary
    if update_soup_xml.summary: update_soup_xml.summary.decompose()

    # hatena:formatted-content
    hatena_formatted_content = update_soup_xml.find("hatena:formatted-content")
    if hatena_formatted_content:
        hatena_formatted_content.decompose()
      
      
      
    # title(変更するなら)
    #new_title = "test title"
    #if new_title: update_soup_xml.title.string = new_title

    # author
    new_author = ""
    if new_author: update_soup_xml.author.string = new_author

    # updated
    new_updated = ""
    if new_updated: update_soup_xml.updated.string = new_updated

    # new category
    new_categories = []
    for new_c in new_categories:
        cate_tag =  update_soup_xml.new_tag("category")
        cate_tag.attrs = {"term": new_c}
        update_soup_xml.append(cate_tag)
    # new draft
    new_draft = "" # yes, no

    if new_draft: soup_response_xml.find("app:draft").string = new_draft
    # content書き換え
    new_content = update_soup_xml.content.string
    for item in replace_data:
        print(item[0] ,item[1] )
        new_content =new_content.replace(item[0], item[1])

    #new_content = "new content"
    #update_soup_xml.content['type'] = "text/plain"
    
    
    update_soup_xml.content.string = new_content
    print( str(update_soup_xml.prettify()))
    result_xml = requests.put(member_uri , auth=(hatena_id, password) , data=str(update_soup_xml).encode("utf-8"))
    print(result_xml)
    print(result_xml.text)

hatena_id = "masalib"
password = "xxxxxxx"
blog_id = "masalib.hatenablog.jp"      #猫用のblogid
entry_id = "10328537792364688871"   #テスト用の記事id

replace_data = []
replace_data.append(["http://cdn-ak.f.st-hatena.com/images/fotolife/m/masalib/20160218/20160218144707.jpg","replace_url_1"] )
replace_data.append(["https://cdn-ak.f.st-hatena.com/images/fotolife/m/masalib/20190323/20190323161133.jpg","replace_url_2"] )
#print (replace_data)

update_blog(hatena_id , password , blog_id, entry_id,replace_data)

結果

f:id:masalib:20190331224433j:plain

ステータスが200になった。
更新もできるようになった。これで次のステップにいける

はまった事

Blog_idがメインとサブが間違えていた
その場合に、データは取得できるけど、更新ができないという沼にはまった

エラー文言 The entry is not article of the blog" api

GETは成功するけど、PUTは失敗するという状態 GETでも失敗してほしかった